Version Description
(4th June, 2020) =
- Bump tested upto version 4.4
- Minimum PHP version set to 5.4
See complete changelog.
Download this release
Release Info
Developer | tareq1988 |
Plugin | Subscribe2 |
Version | 10.33 |
Comparing to | |
See all releases |
Code changes from version 10.32 to 10.33
- .gitignore +14 -0
- ChangeLog.txt → changelog.txt +5 -0
- classes/class-mo-admin-notice.php +8 -8
- include/appsero/composer.json +21 -0
- include/appsero/readme.md +206 -0
- include/appsero/src/Client.php +233 -0
- include/appsero/src/Insights.php +972 -0
- include/appsero/src/License.php +705 -0
- include/appsero/src/Updater.php +247 -0
- ReadMe.txt → readme.txt +17 -5
- subscribe2.php +26 -6
- subscribe2.pot +436 -553
.gitignore
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
config.codekit
|
2 |
+
.idea
|
3 |
+
.codekit-cache
|
4 |
+
/vendor/
|
5 |
+
node_modules
|
6 |
+
zip
|
7 |
+
.DS_Store
|
8 |
+
nbproject
|
9 |
+
debug.log
|
10 |
+
npm-debug.log
|
11 |
+
.netbeans.xml
|
12 |
+
.vscode
|
13 |
+
build/*
|
14 |
+
!build/index.js
|
ChangeLog.txt → changelog.txt
RENAMED
@@ -1,3 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
1 |
= 10.32 =
|
2 |
|
3 |
* Bump minimum required WordPress to 4.4
|
1 |
+
= 10.33 (4th June, 2020) =
|
2 |
+
|
3 |
+
* Bump tested upto version 4.4
|
4 |
+
* Minimum PHP version set to 5.4
|
5 |
+
|
6 |
= 10.32 =
|
7 |
|
8 |
* Bump minimum required WordPress to 4.4
|
classes/class-mo-admin-notice.php
CHANGED
@@ -46,11 +46,11 @@ if ( ! class_exists( 'MO_Admin_Notice' ) ) {
|
|
46 |
);
|
47 |
$this->notice_css();
|
48 |
$install_url = wp_nonce_url(
|
49 |
-
admin_url( '
|
50 |
'install-plugin_mailoptin'
|
51 |
);
|
52 |
|
53 |
-
$activate_url = wp_nonce_url( admin_url( 'plugins.php?action=activate&plugin=
|
54 |
?>
|
55 |
<div class="mo-admin-notice notice notice-success">
|
56 |
<div class="mo-notice-first-half">
|
@@ -58,7 +58,7 @@ if ( ! class_exists( 'MO_Admin_Notice' ) ) {
|
|
58 |
<?php
|
59 |
printf(
|
60 |
// Translators: Mail Optin admin notice
|
61 |
-
__( 'Free
|
62 |
'<span class="mo-stylize"><strong>',
|
63 |
'</strong></span>'
|
64 |
);
|
@@ -69,16 +69,16 @@ if ( ! class_exists( 'MO_Admin_Notice' ) ) {
|
|
69 |
<div class="mo-notice-other-half">
|
70 |
<?php if ( ! $this->is_plugin_installed() ) : ?>
|
71 |
<a class="button button-primary button-hero" id="mo-install-mailoptin-plugin" href="<?php echo $install_url; ?>">
|
72 |
-
<?php _e( 'Install
|
73 |
</a>
|
74 |
<?php endif; ?>
|
75 |
<?php if ( $this->is_plugin_installed() && ! $this->is_plugin_active() ) : ?>
|
76 |
<a class="button button-primary button-hero" id="mo-activate-mailoptin-plugin" href="<?php echo $activate_url; ?>">
|
77 |
-
<?php _e( 'Activate
|
78 |
</a>
|
79 |
<?php endif; ?>
|
80 |
<div class="mo-notice-learn-more">
|
81 |
-
<a target="_blank" href="https://
|
82 |
</div>
|
83 |
</div>
|
84 |
<a href="<?php echo $dismiss_url; ?>">
|
@@ -107,11 +107,11 @@ if ( ! class_exists( 'MO_Admin_Notice' ) ) {
|
|
107 |
public function is_plugin_installed() {
|
108 |
$installed_plugins = get_plugins();
|
109 |
|
110 |
-
return isset( $installed_plugins['
|
111 |
}
|
112 |
|
113 |
public function is_plugin_active() {
|
114 |
-
return is_plugin_active( '
|
115 |
}
|
116 |
|
117 |
public function notice_css() {
|
46 |
);
|
47 |
$this->notice_css();
|
48 |
$install_url = wp_nonce_url(
|
49 |
+
admin_url( 'plugin-install.php?s=wemail&tab=search&type=term' ),
|
50 |
'install-plugin_mailoptin'
|
51 |
);
|
52 |
|
53 |
+
$activate_url = wp_nonce_url( admin_url( 'plugins.php?action=activate&plugin=wemail%2Fwemail.php' ), 'activate-plugin_wemail/wemail.php' );
|
54 |
?>
|
55 |
<div class="mo-admin-notice notice notice-success">
|
56 |
<div class="mo-notice-first-half">
|
58 |
<?php
|
59 |
printf(
|
60 |
// Translators: Mail Optin admin notice
|
61 |
+
__( 'Free email newsletter plugin that will %1$sincrease your email list subscribers%2$s and keep them engaged with %1$sautomated and schedule newsletters%2$s.', 'subscribe2' ),
|
62 |
'<span class="mo-stylize"><strong>',
|
63 |
'</strong></span>'
|
64 |
);
|
69 |
<div class="mo-notice-other-half">
|
70 |
<?php if ( ! $this->is_plugin_installed() ) : ?>
|
71 |
<a class="button button-primary button-hero" id="mo-install-mailoptin-plugin" href="<?php echo $install_url; ?>">
|
72 |
+
<?php _e( 'Install weMail Now for Free!', 'subscribe2' ); ?>
|
73 |
</a>
|
74 |
<?php endif; ?>
|
75 |
<?php if ( $this->is_plugin_installed() && ! $this->is_plugin_active() ) : ?>
|
76 |
<a class="button button-primary button-hero" id="mo-activate-mailoptin-plugin" href="<?php echo $activate_url; ?>">
|
77 |
+
<?php _e( 'Activate weMail Now!', 'subscribe2' ); ?>
|
78 |
</a>
|
79 |
<?php endif; ?>
|
80 |
<div class="mo-notice-learn-more">
|
81 |
+
<a target="_blank" href="https://getwemail.io">Learn more</a>
|
82 |
</div>
|
83 |
</div>
|
84 |
<a href="<?php echo $dismiss_url; ?>">
|
107 |
public function is_plugin_installed() {
|
108 |
$installed_plugins = get_plugins();
|
109 |
|
110 |
+
return isset( $installed_plugins['wemail/wemail.php'] );
|
111 |
}
|
112 |
|
113 |
public function is_plugin_active() {
|
114 |
+
return is_plugin_active( 'wemail/wemail.php' );
|
115 |
}
|
116 |
|
117 |
public function notice_css() {
|
include/appsero/composer.json
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "appsero/client",
|
3 |
+
"description": "Appsero Client",
|
4 |
+
"keywords": ["analytics", "wordpress", "plugin", "theme"],
|
5 |
+
"type": "library",
|
6 |
+
"license": "MIT",
|
7 |
+
"authors": [
|
8 |
+
{
|
9 |
+
"name": "Tareq Hasan",
|
10 |
+
"email": "tareq@appsero.com"
|
11 |
+
}
|
12 |
+
],
|
13 |
+
"autoload": {
|
14 |
+
"psr-4": {
|
15 |
+
"Appsero\\": "src/"
|
16 |
+
}
|
17 |
+
},
|
18 |
+
"require": {
|
19 |
+
"php": ">=5.3"
|
20 |
+
}
|
21 |
+
}
|
include/appsero/readme.md
ADDED
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Appsero - Client
|
2 |
+
|
3 |
+
- [Installation](#installation)
|
4 |
+
- [Insights](#insights)
|
5 |
+
- [Dynamic Usage](#dynamic-usage)
|
6 |
+
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
You can install AppSero Client in two ways, via composer and manually.
|
11 |
+
|
12 |
+
### 1. Composer Installation
|
13 |
+
|
14 |
+
Add dependency in your project (theme/plugin):
|
15 |
+
|
16 |
+
```
|
17 |
+
composer require appsero/client
|
18 |
+
```
|
19 |
+
|
20 |
+
Now add `autoload.php` in your file if you haven't done already.
|
21 |
+
|
22 |
+
```php
|
23 |
+
require __DIR__ . '/vendor/autoload.php';
|
24 |
+
```
|
25 |
+
|
26 |
+
### 2. Manual Installation
|
27 |
+
|
28 |
+
Clone the repository in your project.
|
29 |
+
|
30 |
+
```
|
31 |
+
cd /path/to/your/project/folder
|
32 |
+
git clone https://github.com/AppSero/client.git appsero
|
33 |
+
```
|
34 |
+
|
35 |
+
Now include the dependencies in your plugin/theme.
|
36 |
+
|
37 |
+
```php
|
38 |
+
require __DIR__ . '/appsero/src/Client.php';
|
39 |
+
```
|
40 |
+
|
41 |
+
## Insights
|
42 |
+
|
43 |
+
AppSero can be used in both themes and plugins.
|
44 |
+
|
45 |
+
The `Appsero\Client` class has *three* parameters:
|
46 |
+
|
47 |
+
```php
|
48 |
+
$client = new Appsero\Client( $hash, $name, $file );
|
49 |
+
```
|
50 |
+
|
51 |
+
- **hash** (*string*, *required*) - The unique identifier for a plugin or theme.
|
52 |
+
- **name** (*string*, *required*) - The name of the plugin or theme.
|
53 |
+
- **file** (*string*, *required*) - The **main file** path of the plugin. For theme, path to `functions.php`
|
54 |
+
|
55 |
+
### Usage Example
|
56 |
+
|
57 |
+
Please refer to the **installation** step before start using the class.
|
58 |
+
|
59 |
+
You can obtain the **hash** for your plugin for the [Appsero Dashboard](https://dashboard.appsero.com). The 3rd parameter **must** have to be the main file of the plugin.
|
60 |
+
|
61 |
+
```php
|
62 |
+
/**
|
63 |
+
* Initialize the tracker
|
64 |
+
*
|
65 |
+
* @return void
|
66 |
+
*/
|
67 |
+
function appsero_init_tracker_appsero_test() {
|
68 |
+
|
69 |
+
if ( ! class_exists( 'Appsero\Client' ) ) {
|
70 |
+
require_once __DIR__ . '/appsero/src/Client.php';
|
71 |
+
}
|
72 |
+
|
73 |
+
$client = new Appsero\Client( 'a4a8da5b-b419-4656-98e9-4a42e9044891', 'Akismet', __FILE__ );
|
74 |
+
|
75 |
+
// Active insights
|
76 |
+
$client->insights()->init();
|
77 |
+
|
78 |
+
// Active automatic updater
|
79 |
+
$client->updater();
|
80 |
+
|
81 |
+
// Active license page and checker
|
82 |
+
$args = array(
|
83 |
+
'type' => 'options',
|
84 |
+
'menu_title' => 'Akismet',
|
85 |
+
'page_title' => 'Akismet License Settings',
|
86 |
+
'menu_slug' => 'akismet_settings',
|
87 |
+
);
|
88 |
+
$client->license()->add_settings_page( $args );
|
89 |
+
}
|
90 |
+
|
91 |
+
appsero_init_tracker_appsero_test();
|
92 |
+
```
|
93 |
+
|
94 |
+
Make sure you call this function directly, never use any action hook to call this function.
|
95 |
+
|
96 |
+
> For plugins example code that needs to be used on your main plugin file.
|
97 |
+
> For themes example code that needs to be used on your themes `functions.php` file.
|
98 |
+
|
99 |
+
## More Usage
|
100 |
+
|
101 |
+
Sometimes you wouldn't want to show the notice, or want to customize the notice message. You can do that as well.
|
102 |
+
|
103 |
+
```php
|
104 |
+
$client = new Appsero\Client( 'a4a8da5b-b419-4656-98e9-4a42e9044892', 'Twenty Twelve', __FILE__ );
|
105 |
+
```
|
106 |
+
|
107 |
+
#### 1. Hiding the notice
|
108 |
+
|
109 |
+
```php
|
110 |
+
$client->insights()
|
111 |
+
->hide_notice()
|
112 |
+
->init();
|
113 |
+
```
|
114 |
+
|
115 |
+
#### 2. Customizing the notice message
|
116 |
+
|
117 |
+
```php
|
118 |
+
$client->insights()
|
119 |
+
->notice( 'My Custom Notice Message' )
|
120 |
+
->init();
|
121 |
+
```
|
122 |
+
|
123 |
+
#### 3. Adding extra data
|
124 |
+
|
125 |
+
You can add extra metadata from your theme or plugin. In that case, the **keys** has to be whitelisted from the Appsero dashboard.
|
126 |
+
`add_extra` method also support callback as parameter, If you need database call then callback is best for you.
|
127 |
+
|
128 |
+
```php
|
129 |
+
$metadata = array(
|
130 |
+
'key' => 'value',
|
131 |
+
'another' => 'another_value'
|
132 |
+
);
|
133 |
+
$client->insights()
|
134 |
+
->add_extra( $metadata )
|
135 |
+
->init();
|
136 |
+
```
|
137 |
+
|
138 |
+
or
|
139 |
+
|
140 |
+
```php
|
141 |
+
$metadata = function () {
|
142 |
+
return array(
|
143 |
+
'key' => 'value',
|
144 |
+
'another' => 'another_value'
|
145 |
+
);
|
146 |
+
};
|
147 |
+
$client->insights()
|
148 |
+
->add_extra( $metadata )
|
149 |
+
->init();
|
150 |
+
```
|
151 |
+
|
152 |
+
---
|
153 |
+
|
154 |
+
### Check License Validity
|
155 |
+
|
156 |
+
Check your plugin/theme is using with valid license or not, First create a global variable of `License` object then use it anywhere in your code.
|
157 |
+
If you are using it outside of same function make sure you global the variable before using the condition.
|
158 |
+
|
159 |
+
```php
|
160 |
+
$client = new Appsero\Client( 'a4a8da5b-b419-4656-98e9-4a42e9044892', 'Twenty Twelve', __FILE__ );
|
161 |
+
|
162 |
+
$args = array(
|
163 |
+
'type' => 'submenu',
|
164 |
+
'menu_title' => 'Twenty Twelve License',
|
165 |
+
'page_title' => 'Twenty Twelve License Settings',
|
166 |
+
'menu_slug' => 'twenty_twelve_settings',
|
167 |
+
'parent_slug' => 'themes.php',
|
168 |
+
);
|
169 |
+
|
170 |
+
global $twenty_twelve_license;
|
171 |
+
$twenty_twelve_license = $client->license();
|
172 |
+
$twenty_twelve_license->add_settings_page( $args );
|
173 |
+
|
174 |
+
if ( $twenty_twelve_license->is_valid() ) {
|
175 |
+
// Your special code here
|
176 |
+
}
|
177 |
+
|
178 |
+
Or check by pricing plan title
|
179 |
+
|
180 |
+
if ( $twenty_twelve_license->is_valid_by( 'title', 'Business' ) ) {
|
181 |
+
// Your special code here
|
182 |
+
}
|
183 |
+
```
|
184 |
+
|
185 |
+
### Use your own license form
|
186 |
+
|
187 |
+
You can easily manage license by creating a form using HTTP request. Call `license_form_submit` method from License object.
|
188 |
+
|
189 |
+
```php
|
190 |
+
global $twenty_twelve_license; // License object
|
191 |
+
$twenty_twelve_license->license_form_submit([
|
192 |
+
'_nonce' => wp_create_nonce( 'Twenty Twelve' ), // create a nonce with name
|
193 |
+
'_action' => 'active', // active, deactive
|
194 |
+
'license_key' => 'random-license-key', // no need to provide if you want to deactive
|
195 |
+
]);
|
196 |
+
if ( ! $twenty_twelve_license->error ) {
|
197 |
+
// license activated
|
198 |
+
$twenty_twelve_license->success; // Success message is here
|
199 |
+
} else {
|
200 |
+
$twenty_twelve_license->error; // has error message here
|
201 |
+
}
|
202 |
+
```
|
203 |
+
|
204 |
+
## Credits
|
205 |
+
|
206 |
+
Created and maintained by [Appsero](https://appsero.com).
|
include/appsero/src/Client.php
ADDED
@@ -0,0 +1,233 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Appsero;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Appsero Client
|
6 |
+
*
|
7 |
+
* This class is necessary to set project data
|
8 |
+
*/
|
9 |
+
class Client {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* The client version
|
13 |
+
*
|
14 |
+
* @var string
|
15 |
+
*/
|
16 |
+
public $version = '1.1.11';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Hash identifier of the plugin
|
20 |
+
*
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
public $hash;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Name of the plugin
|
27 |
+
*
|
28 |
+
* @var string
|
29 |
+
*/
|
30 |
+
public $name;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* The plugin/theme file path
|
34 |
+
* @example .../wp-content/plugins/test-slug/test-slug.php
|
35 |
+
*
|
36 |
+
* @var string
|
37 |
+
*/
|
38 |
+
public $file;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Main plugin file
|
42 |
+
* @example test-slug/test-slug.php
|
43 |
+
*
|
44 |
+
* @var string
|
45 |
+
*/
|
46 |
+
public $basename;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Slug of the plugin
|
50 |
+
* @example test-slug
|
51 |
+
*
|
52 |
+
* @var string
|
53 |
+
*/
|
54 |
+
public $slug;
|
55 |
+
|
56 |
+
/**
|
57 |
+
* The project version
|
58 |
+
*
|
59 |
+
* @var string
|
60 |
+
*/
|
61 |
+
public $project_version;
|
62 |
+
|
63 |
+
/**
|
64 |
+
* The project type
|
65 |
+
*
|
66 |
+
* @var string
|
67 |
+
*/
|
68 |
+
public $type;
|
69 |
+
|
70 |
+
/**
|
71 |
+
* textdomain
|
72 |
+
*
|
73 |
+
* @var string
|
74 |
+
*/
|
75 |
+
public $textdomain;
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Initialize the class
|
79 |
+
*
|
80 |
+
* @param string $hash hash of the plugin
|
81 |
+
* @param string $name readable name of the plugin
|
82 |
+
* @param string $file main plugin file path
|
83 |
+
*/
|
84 |
+
public function __construct( $hash, $name, $file ) {
|
85 |
+
$this->hash = $hash;
|
86 |
+
$this->name = $name;
|
87 |
+
$this->file = $file;
|
88 |
+
|
89 |
+
$this->set_basename_and_slug();
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Initialize insights class
|
94 |
+
*
|
95 |
+
* @return Appsero\Insights
|
96 |
+
*/
|
97 |
+
public function insights() {
|
98 |
+
|
99 |
+
if ( ! class_exists( __NAMESPACE__ . '\Insights') ) {
|
100 |
+
require_once __DIR__ . '/Insights.php';
|
101 |
+
}
|
102 |
+
|
103 |
+
return new Insights( $this );
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Initialize plugin/theme updater
|
108 |
+
*
|
109 |
+
* @return Appsero\Updater
|
110 |
+
*/
|
111 |
+
public function updater() {
|
112 |
+
|
113 |
+
if ( ! class_exists( __NAMESPACE__ . '\Updater') ) {
|
114 |
+
require_once __DIR__ . '/Updater.php';
|
115 |
+
}
|
116 |
+
|
117 |
+
return new Updater( $this );
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Initialize license checker
|
122 |
+
*
|
123 |
+
* @return Appsero\License
|
124 |
+
*/
|
125 |
+
public function license() {
|
126 |
+
|
127 |
+
if ( ! class_exists( __NAMESPACE__ . '\License') ) {
|
128 |
+
require_once __DIR__ . '/License.php';
|
129 |
+
}
|
130 |
+
|
131 |
+
return new License( $this );
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* API Endpoint
|
136 |
+
*
|
137 |
+
* @return string
|
138 |
+
*/
|
139 |
+
public function endpoint() {
|
140 |
+
$endpoint = apply_filters( 'appsero_endpoint', 'https://api.appsero.com' );
|
141 |
+
|
142 |
+
return trailingslashit( $endpoint );
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Set project basename, slug and version
|
147 |
+
*
|
148 |
+
* @return void
|
149 |
+
*/
|
150 |
+
protected function set_basename_and_slug() {
|
151 |
+
|
152 |
+
if ( strpos( $this->file, WP_CONTENT_DIR . '/themes/' ) === false ) {
|
153 |
+
|
154 |
+
$this->basename = plugin_basename( $this->file );
|
155 |
+
|
156 |
+
list( $this->slug, $mainfile) = explode( '/', $this->basename );
|
157 |
+
|
158 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
159 |
+
|
160 |
+
$plugin_data = get_plugin_data( $this->file );
|
161 |
+
|
162 |
+
$this->project_version = $plugin_data['Version'];
|
163 |
+
$this->type = 'plugin';
|
164 |
+
$this->textdomain = $this->slug;
|
165 |
+
|
166 |
+
} else {
|
167 |
+
|
168 |
+
$this->basename = str_replace( WP_CONTENT_DIR . '/themes/', '', $this->file );
|
169 |
+
|
170 |
+
list( $this->slug, $mainfile) = explode( '/', $this->basename );
|
171 |
+
|
172 |
+
$theme = wp_get_theme( $this->slug );
|
173 |
+
|
174 |
+
$this->project_version = $theme->version;
|
175 |
+
$this->type = 'theme';
|
176 |
+
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Send request to remote endpoint
|
182 |
+
*
|
183 |
+
* @param array $params
|
184 |
+
* @param string $route
|
185 |
+
*
|
186 |
+
* @return array|WP_Error Array of results including HTTP headers or WP_Error if the request failed.
|
187 |
+
*/
|
188 |
+
public function send_request( $params, $route, $blocking = false ) {
|
189 |
+
$url = $this->endpoint() . $route;
|
190 |
+
|
191 |
+
$headers = array(
|
192 |
+
'user-agent' => 'Appsero/' . md5( esc_url( home_url() ) ) . ';',
|
193 |
+
'Accept' => 'application/json',
|
194 |
+
);
|
195 |
+
|
196 |
+
$response = wp_remote_post( $url, array(
|
197 |
+
'method' => 'POST',
|
198 |
+
'timeout' => 30,
|
199 |
+
'redirection' => 5,
|
200 |
+
'httpversion' => '1.0',
|
201 |
+
'blocking' => $blocking,
|
202 |
+
'headers' => $headers,
|
203 |
+
'body' => array_merge( $params, array( 'client' => $this->version ) ),
|
204 |
+
'cookies' => array()
|
205 |
+
) );
|
206 |
+
|
207 |
+
return $response;
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Check if the current server is localhost
|
212 |
+
*
|
213 |
+
* @return boolean
|
214 |
+
*/
|
215 |
+
public function is_local_server() {
|
216 |
+
return in_array( $_SERVER['REMOTE_ADDR'], array( '127.0.0.1', '::1' ) );
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Translate function _e()
|
221 |
+
*/
|
222 |
+
public function _etrans( $text ) {
|
223 |
+
call_user_func( '_e', $text, $this->textdomain );
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Translate function __()
|
228 |
+
*/
|
229 |
+
public function __trans( $text ) {
|
230 |
+
return call_user_func( '__', $text, $this->textdomain );
|
231 |
+
}
|
232 |
+
|
233 |
+
}
|
include/appsero/src/Insights.php
ADDED
@@ -0,0 +1,972 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Appsero;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Appsero Insights
|
6 |
+
*
|
7 |
+
* This is a tracker class to track plugin usage based on if the customer has opted in.
|
8 |
+
* No personal information is being tracked by this class, only general settings, active plugins, environment details
|
9 |
+
* and admin email.
|
10 |
+
*/
|
11 |
+
class Insights {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* The notice text
|
15 |
+
*
|
16 |
+
* @var string
|
17 |
+
*/
|
18 |
+
public $notice;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Wheather to the notice or not
|
22 |
+
*
|
23 |
+
* @var boolean
|
24 |
+
*/
|
25 |
+
protected $show_notice = true;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* If extra data needs to be sent
|
29 |
+
*
|
30 |
+
* @var array
|
31 |
+
*/
|
32 |
+
protected $extra_data = array();
|
33 |
+
|
34 |
+
/**
|
35 |
+
* AppSero\Client
|
36 |
+
*
|
37 |
+
* @var object
|
38 |
+
*/
|
39 |
+
protected $client;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Initialize the class
|
43 |
+
*
|
44 |
+
* @param AppSero\Client
|
45 |
+
*/
|
46 |
+
public function __construct( $client, $name = null, $file = null ) {
|
47 |
+
|
48 |
+
if ( is_string( $client ) && ! empty( $name ) && ! empty( $file ) ) {
|
49 |
+
$client = new Client( $client, $name, $file );
|
50 |
+
}
|
51 |
+
|
52 |
+
if ( is_object( $client ) && is_a( $client, 'Appsero\Client' ) ) {
|
53 |
+
$this->client = $client;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Don't show the notice
|
59 |
+
*
|
60 |
+
* @return \self
|
61 |
+
*/
|
62 |
+
public function hide_notice() {
|
63 |
+
$this->show_notice = false;
|
64 |
+
|
65 |
+
return $this;
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Add extra data if needed
|
70 |
+
*
|
71 |
+
* @param array $data
|
72 |
+
*
|
73 |
+
* @return \self
|
74 |
+
*/
|
75 |
+
public function add_extra( $data = array() ) {
|
76 |
+
$this->extra_data = $data;
|
77 |
+
|
78 |
+
return $this;
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Set custom notice text
|
83 |
+
*
|
84 |
+
* @param string $text
|
85 |
+
*
|
86 |
+
* @return \self
|
87 |
+
*/
|
88 |
+
public function notice( $text ) {
|
89 |
+
$this->notice = $text;
|
90 |
+
|
91 |
+
return $this;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Initialize insights
|
96 |
+
*
|
97 |
+
* @return void
|
98 |
+
*/
|
99 |
+
public function init() {
|
100 |
+
if ( $this->client->type == 'plugin' ) {
|
101 |
+
$this->init_plugin();
|
102 |
+
} else if ( $this->client->type == 'theme' ) {
|
103 |
+
$this->init_theme();
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Initialize theme hooks
|
109 |
+
*
|
110 |
+
* @return void
|
111 |
+
*/
|
112 |
+
public function init_theme() {
|
113 |
+
$this->init_common();
|
114 |
+
|
115 |
+
add_action( 'switch_theme', array( $this, 'deactivation_cleanup' ) );
|
116 |
+
add_action( 'switch_theme', array( $this, 'theme_deactivated' ), 12, 3 );
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Initialize plugin hooks
|
121 |
+
*
|
122 |
+
* @return void
|
123 |
+
*/
|
124 |
+
public function init_plugin() {
|
125 |
+
// plugin deactivate popup
|
126 |
+
if ( ! $this->is_local_server() ) {
|
127 |
+
add_filter( 'plugin_action_links_' . $this->client->basename, array( $this, 'plugin_action_links' ) );
|
128 |
+
add_action( 'admin_footer', array( $this, 'deactivate_scripts' ) );
|
129 |
+
}
|
130 |
+
|
131 |
+
$this->init_common();
|
132 |
+
|
133 |
+
register_activation_hook( $this->client->file, array( $this, 'activate_plugin' ) );
|
134 |
+
register_deactivation_hook( $this->client->file, array( $this, 'deactivation_cleanup' ) );
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Initialize common hooks
|
139 |
+
*
|
140 |
+
* @return void
|
141 |
+
*/
|
142 |
+
protected function init_common() {
|
143 |
+
|
144 |
+
if ( $this->show_notice ) {
|
145 |
+
// tracking notice
|
146 |
+
add_action( 'admin_notices', array( $this, 'admin_notice' ) );
|
147 |
+
}
|
148 |
+
|
149 |
+
add_action( 'admin_init', array( $this, 'handle_optin_optout' ) );
|
150 |
+
|
151 |
+
// uninstall reason
|
152 |
+
add_action( 'wp_ajax_' . $this->client->slug . '_submit-uninstall-reason', array( $this, 'uninstall_reason_submission' ) );
|
153 |
+
|
154 |
+
// cron events
|
155 |
+
add_filter( 'cron_schedules', array( $this, 'add_weekly_schedule' ) );
|
156 |
+
add_action( $this->client->slug . '_tracker_send_event', array( $this, 'send_tracking_data' ) );
|
157 |
+
// add_action( 'admin_init', array( $this, 'send_tracking_data' ) ); // test
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Send tracking data to AppSero server
|
162 |
+
*
|
163 |
+
* @param boolean $override
|
164 |
+
*
|
165 |
+
* @return void
|
166 |
+
*/
|
167 |
+
public function send_tracking_data( $override = false ) {
|
168 |
+
// skip on AJAX Requests
|
169 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
170 |
+
return;
|
171 |
+
}
|
172 |
+
|
173 |
+
if ( ! $this->tracking_allowed() && ! $override ) {
|
174 |
+
return;
|
175 |
+
}
|
176 |
+
|
177 |
+
// Send a maximum of once per week
|
178 |
+
$last_send = $this->get_last_send();
|
179 |
+
|
180 |
+
if ( $last_send && $last_send > strtotime( '-1 week' ) ) {
|
181 |
+
return;
|
182 |
+
}
|
183 |
+
|
184 |
+
$response = $this->client->send_request( $this->get_tracking_data(), 'track' );
|
185 |
+
|
186 |
+
update_option( $this->client->slug . '_tracking_last_send', time() );
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Get the tracking data points
|
191 |
+
*
|
192 |
+
* @return array
|
193 |
+
*/
|
194 |
+
protected function get_tracking_data() {
|
195 |
+
$all_plugins = $this->get_all_plugins();
|
196 |
+
|
197 |
+
$users = get_users( array(
|
198 |
+
'role' => 'administrator',
|
199 |
+
'orderby' => 'ID',
|
200 |
+
'order' => 'ASC',
|
201 |
+
'number' => 1,
|
202 |
+
'paged' => 1,
|
203 |
+
) );
|
204 |
+
|
205 |
+
$admin_user = ( is_array( $users ) && ! empty( $users ) ) ? $users[0] : false;
|
206 |
+
$first_name = $last_name = '';
|
207 |
+
|
208 |
+
if ( $admin_user ) {
|
209 |
+
$first_name = $admin_user->first_name ? $admin_user->first_name : $admin_user->display_name;
|
210 |
+
$last_name = $admin_user->last_name;
|
211 |
+
}
|
212 |
+
|
213 |
+
$data = array(
|
214 |
+
'version' => $this->client->project_version,
|
215 |
+
'url' => esc_url( home_url() ),
|
216 |
+
'site' => $this->get_site_name(),
|
217 |
+
'admin_email' => get_option( 'admin_email' ),
|
218 |
+
'first_name' => $first_name,
|
219 |
+
'last_name' => $last_name,
|
220 |
+
'hash' => $this->client->hash,
|
221 |
+
'server' => $this->get_server_info(),
|
222 |
+
'wp' => $this->get_wp_info(),
|
223 |
+
'users' => $this->get_user_counts(),
|
224 |
+
'active_plugins' => count( $all_plugins['active_plugins'] ),
|
225 |
+
'inactive_plugins' => count( $all_plugins['inactive_plugins'] ),
|
226 |
+
'ip_address' => $this->get_user_ip_address(),
|
227 |
+
'theme' => get_stylesheet(),
|
228 |
+
'version' => $this->client->project_version,
|
229 |
+
);
|
230 |
+
|
231 |
+
// Add metadata
|
232 |
+
if ( $extra = $this->get_extra_data() ) {
|
233 |
+
$data['extra'] = $extra;
|
234 |
+
}
|
235 |
+
|
236 |
+
return apply_filters( $this->client->slug . '_tracker_data', $data );
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* If a child class wants to send extra data
|
241 |
+
*
|
242 |
+
* @return mixed
|
243 |
+
*/
|
244 |
+
protected function get_extra_data() {
|
245 |
+
if ( is_callable( $this->extra_data ) ) {
|
246 |
+
return call_user_func( $this->extra_data );
|
247 |
+
}
|
248 |
+
|
249 |
+
if ( is_array( $this->extra_data ) ) {
|
250 |
+
return $this->extra_data;
|
251 |
+
}
|
252 |
+
|
253 |
+
return array();
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Explain the user which data we collect
|
258 |
+
*
|
259 |
+
* @return string
|
260 |
+
*/
|
261 |
+
protected function data_we_collect() {
|
262 |
+
$data = array(
|
263 |
+
'Server environment details (php, mysql, server, WordPress versions)',
|
264 |
+
'Number of users in your site',
|
265 |
+
'Site language',
|
266 |
+
'Number of active and inactive plugins',
|
267 |
+
'Site name and url',
|
268 |
+
'Your name and email address',
|
269 |
+
);
|
270 |
+
|
271 |
+
return $data;
|
272 |
+
}
|
273 |
+
|
274 |
+
/**
|
275 |
+
* Check if the user has opted into tracking
|
276 |
+
*
|
277 |
+
* @return bool
|
278 |
+
*/
|
279 |
+
public function tracking_allowed() {
|
280 |
+
$allow_tracking = get_option( $this->client->slug . '_allow_tracking', 'no' );
|
281 |
+
|
282 |
+
return $allow_tracking == 'yes';
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Get the last time a tracking was sent
|
287 |
+
*
|
288 |
+
* @return false|string
|
289 |
+
*/
|
290 |
+
private function get_last_send() {
|
291 |
+
return get_option( $this->client->slug . '_tracking_last_send', false );
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Check if the notice has been dismissed or enabled
|
296 |
+
*
|
297 |
+
* @return boolean
|
298 |
+
*/
|
299 |
+
private function notice_dismissed() {
|
300 |
+
$hide_notice = get_option( $this->client->slug . '_tracking_notice', null );
|
301 |
+
|
302 |
+
if ( 'hide' == $hide_notice ) {
|
303 |
+
return true;
|
304 |
+
}
|
305 |
+
|
306 |
+
return false;
|
307 |
+
}
|
308 |
+
|
309 |
+
/**
|
310 |
+
* Check if the current server is localhost
|
311 |
+
*
|
312 |
+
* @return boolean
|
313 |
+
*/
|
314 |
+
private function is_local_server() {
|
315 |
+
return false;
|
316 |
+
|
317 |
+
$is_local = in_array( $_SERVER['REMOTE_ADDR'], array( '127.0.0.1', '::1' ) );
|
318 |
+
|
319 |
+
return apply_filters( 'appsero_is_local', $is_local );
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Schedule the event weekly
|
324 |
+
*
|
325 |
+
* @return void
|
326 |
+
*/
|
327 |
+
private function schedule_event() {
|
328 |
+
$hook_name = $this->client->slug . '_tracker_send_event';
|
329 |
+
|
330 |
+
if ( ! wp_next_scheduled( $hook_name ) ) {
|
331 |
+
wp_schedule_event( time(), 'weekly', $hook_name );
|
332 |
+
}
|
333 |
+
}
|
334 |
+
|
335 |
+
/**
|
336 |
+
* Clear any scheduled hook
|
337 |
+
*
|
338 |
+
* @return void
|
339 |
+
*/
|
340 |
+
private function clear_schedule_event() {
|
341 |
+
wp_clear_scheduled_hook( $this->client->slug . '_tracker_send_event' );
|
342 |
+
}
|
343 |
+
|
344 |
+
/**
|
345 |
+
* Display the admin notice to users that have not opted-in or out
|
346 |
+
*
|
347 |
+
* @return void
|
348 |
+
*/
|
349 |
+
public function admin_notice() {
|
350 |
+
|
351 |
+
if ( $this->notice_dismissed() ) {
|
352 |
+
return;
|
353 |
+
}
|
354 |
+
|
355 |
+
if ( $this->tracking_allowed() ) {
|
356 |
+
return;
|
357 |
+
}
|
358 |
+
|
359 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
360 |
+
return;
|
361 |
+
}
|
362 |
+
|
363 |
+
// don't show tracking if a local server
|
364 |
+
if ( ! $this->is_local_server() ) {
|
365 |
+
$optin_url = add_query_arg( $this->client->slug . '_tracker_optin', 'true' );
|
366 |
+
$optout_url = add_query_arg( $this->client->slug . '_tracker_optout', 'true' );
|
367 |
+
|
368 |
+
if ( empty( $this->notice ) ) {
|
369 |
+
$notice = sprintf( $this->client->__trans( 'Want to help make <strong>%1$s</strong> even more awesome? Allow %1$s to collect non-sensitive diagnostic data and usage information.' ), $this->client->name );
|
370 |
+
} else {
|
371 |
+
$notice = $this->notice;
|
372 |
+
}
|
373 |
+
|
374 |
+
$policy_url = 'https://' . 'appsero.com/privacy-policy/';
|
375 |
+
|
376 |
+
$notice .= ' (<a class="' . $this->client->slug . '-insights-data-we-collect" href="#">' . $this->client->__trans( 'what we collect' ) . '</a>)';
|
377 |
+
$notice .= '<p class="description" style="display:none;">' . implode( ', ', $this->data_we_collect() ) . '. No sensitive data is tracked. ';
|
378 |
+
$notice .= 'We are using Appsero to collect your data. <a href="' . $policy_url . '">Learn more</a> about how Appsero collects and handle your data.</p>';
|
379 |
+
|
380 |
+
echo '<div class="updated"><p>';
|
381 |
+
echo $notice;
|
382 |
+
echo '</p><p class="submit">';
|
383 |
+
echo ' <a href="' . esc_url( $optin_url ) . '" class="button-primary button-large">' . $this->client->__trans( 'Allow' ) . '</a>';
|
384 |
+
echo ' <a href="' . esc_url( $optout_url ) . '" class="button-secondary button-large">' . $this->client->__trans( 'No thanks' ) . '</a>';
|
385 |
+
echo '</p></div>';
|
386 |
+
|
387 |
+
echo "<script type='text/javascript'>jQuery('." . $this->client->slug . "-insights-data-we-collect').on('click', function(e) {
|
388 |
+
e.preventDefault();
|
389 |
+
jQuery(this).parents('.updated').find('p.description').slideToggle('fast');
|
390 |
+
});
|
391 |
+
</script>
|
392 |
+
";
|
393 |
+
}
|
394 |
+
}
|
395 |
+
|
396 |
+
/**
|
397 |
+
* handle the optin/optout
|
398 |
+
*
|
399 |
+
* @return void
|
400 |
+
*/
|
401 |
+
public function handle_optin_optout() {
|
402 |
+
|
403 |
+
if ( isset( $_GET[ $this->client->slug . '_tracker_optin' ] ) && $_GET[ $this->client->slug . '_tracker_optin' ] == 'true' ) {
|
404 |
+
$this->optin();
|
405 |
+
|
406 |
+
wp_redirect( remove_query_arg( $this->client->slug . '_tracker_optin' ) );
|
407 |
+
exit;
|
408 |
+
}
|
409 |
+
|
410 |
+
if ( isset( $_GET[ $this->client->slug . '_tracker_optout' ] ) && $_GET[ $this->client->slug . '_tracker_optout' ] == 'true' ) {
|
411 |
+
$this->optout();
|
412 |
+
|
413 |
+
wp_redirect( remove_query_arg( $this->client->slug . '_tracker_optout' ) );
|
414 |
+
exit;
|
415 |
+
}
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Tracking optin
|
420 |
+
*
|
421 |
+
* @return void
|
422 |
+
*/
|
423 |
+
public function optin() {
|
424 |
+
update_option( $this->client->slug . '_allow_tracking', 'yes' );
|
425 |
+
update_option( $this->client->slug . '_tracking_notice', 'hide' );
|
426 |
+
|
427 |
+
$this->clear_schedule_event();
|
428 |
+
$this->schedule_event();
|
429 |
+
$this->send_tracking_data();
|
430 |
+
}
|
431 |
+
|
432 |
+
/**
|
433 |
+
* Optout from tracking
|
434 |
+
*
|
435 |
+
* @return void
|
436 |
+
*/
|
437 |
+
public function optout() {
|
438 |
+
update_option( $this->client->slug . '_allow_tracking', 'no' );
|
439 |
+
update_option( $this->client->slug . '_tracking_notice', 'hide' );
|
440 |
+
|
441 |
+
$this->clear_schedule_event();
|
442 |
+
}
|
443 |
+
|
444 |
+
/**
|
445 |
+
* Get the number of post counts
|
446 |
+
*
|
447 |
+
* @param string $post_type
|
448 |
+
*
|
449 |
+
* @return integer
|
450 |
+
*/
|
451 |
+
public function get_post_count( $post_type ) {
|
452 |
+
global $wpdb;
|
453 |
+
|
454 |
+
return (int) $wpdb->get_var( "SELECT count(ID) FROM $wpdb->posts WHERE post_type = '$post_type' and post_status = 'publish'");
|
455 |
+
}
|
456 |
+
|
457 |
+
/**
|
458 |
+
* Get server related info.
|
459 |
+
*
|
460 |
+
* @return array
|
461 |
+
*/
|
462 |
+
private static function get_server_info() {
|
463 |
+
global $wpdb;
|
464 |
+
|
465 |
+
$server_data = array();
|
466 |
+
|
467 |
+
if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
468 |
+
$server_data['software'] = $_SERVER['SERVER_SOFTWARE'];
|
469 |
+
}
|
470 |
+
|
471 |
+
if ( function_exists( 'phpversion' ) ) {
|
472 |
+
$server_data['php_version'] = phpversion();
|
473 |
+
}
|
474 |
+
|
475 |
+
$server_data['mysql_version'] = $wpdb->db_version();
|
476 |
+
|
477 |
+
$server_data['php_max_upload_size'] = size_format( wp_max_upload_size() );
|
478 |
+
$server_data['php_default_timezone'] = date_default_timezone_get();
|
479 |
+
$server_data['php_soap'] = class_exists( 'SoapClient' ) ? 'Yes' : 'No';
|
480 |
+
$server_data['php_fsockopen'] = function_exists( 'fsockopen' ) ? 'Yes' : 'No';
|
481 |
+
$server_data['php_curl'] = function_exists( 'curl_init' ) ? 'Yes' : 'No';
|
482 |
+
|
483 |
+
return $server_data;
|
484 |
+
}
|
485 |
+
|
486 |
+
/**
|
487 |
+
* Get WordPress related data.
|
488 |
+
*
|
489 |
+
* @return array
|
490 |
+
*/
|
491 |
+
private function get_wp_info() {
|
492 |
+
$wp_data = array();
|
493 |
+
|
494 |
+
$wp_data['memory_limit'] = WP_MEMORY_LIMIT;
|
495 |
+
$wp_data['debug_mode'] = ( defined('WP_DEBUG') && WP_DEBUG ) ? 'Yes' : 'No';
|
496 |
+
$wp_data['locale'] = get_locale();
|
497 |
+
$wp_data['version'] = get_bloginfo( 'version' );
|
498 |
+
$wp_data['multisite'] = is_multisite() ? 'Yes' : 'No';
|
499 |
+
|
500 |
+
return $wp_data;
|
501 |
+
}
|
502 |
+
|
503 |
+
/**
|
504 |
+
* Get the list of active and inactive plugins
|
505 |
+
*
|
506 |
+
* @return array
|
507 |
+
*/
|
508 |
+
private function get_all_plugins() {
|
509 |
+
// Ensure get_plugins function is loaded
|
510 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
511 |
+
include ABSPATH . '/wp-admin/includes/plugin.php';
|
512 |
+
}
|
513 |
+
|
514 |
+
$plugins = get_plugins();
|
515 |
+
$active_plugins_keys = get_option( 'active_plugins', array() );
|
516 |
+
$active_plugins = array();
|
517 |
+
|
518 |
+
foreach ( $plugins as $k => $v ) {
|
519 |
+
// Take care of formatting the data how we want it.
|
520 |
+
$formatted = array();
|
521 |
+
$formatted['name'] = strip_tags( $v['Name'] );
|
522 |
+
|
523 |
+
if ( isset( $v['Version'] ) ) {
|
524 |
+
$formatted['version'] = strip_tags( $v['Version'] );
|
525 |
+
}
|
526 |
+
|
527 |
+
if ( isset( $v['Author'] ) ) {
|
528 |
+
$formatted['author'] = strip_tags( $v['Author'] );
|
529 |
+
}
|
530 |
+
|
531 |
+
if ( isset( $v['Network'] ) ) {
|
532 |
+
$formatted['network'] = strip_tags( $v['Network'] );
|
533 |
+
}
|
534 |
+
|
535 |
+
if ( isset( $v['PluginURI'] ) ) {
|
536 |
+
$formatted['plugin_uri'] = strip_tags( $v['PluginURI'] );
|
537 |
+
}
|
538 |
+
|
539 |
+
if ( in_array( $k, $active_plugins_keys ) ) {
|
540 |
+
// Remove active plugins from list so we can show active and inactive separately
|
541 |
+
unset( $plugins[$k] );
|
542 |
+
$active_plugins[$k] = $formatted;
|
543 |
+
} else {
|
544 |
+
$plugins[$k] = $formatted;
|
545 |
+
}
|
546 |
+
}
|
547 |
+
|
548 |
+
return array( 'active_plugins' => $active_plugins, 'inactive_plugins' => $plugins );
|
549 |
+
}
|
550 |
+
|
551 |
+
/**
|
552 |
+
* Get user totals based on user role.
|
553 |
+
*
|
554 |
+
* @return array
|
555 |
+
*/
|
556 |
+
public function get_user_counts() {
|
557 |
+
$user_count = array();
|
558 |
+
$user_count_data = count_users();
|
559 |
+
$user_count['total'] = $user_count_data['total_users'];
|
560 |
+
|
561 |
+
// Get user count based on user role
|
562 |
+
foreach ( $user_count_data['avail_roles'] as $role => $count ) {
|
563 |
+
$user_count[ $role ] = $count;
|
564 |
+
}
|
565 |
+
|
566 |
+
return $user_count;
|
567 |
+
}
|
568 |
+
|
569 |
+
/**
|
570 |
+
* Add weekly cron schedule
|
571 |
+
*
|
572 |
+
* @param array $schedules
|
573 |
+
*
|
574 |
+
* @return array
|
575 |
+
*/
|
576 |
+
public function add_weekly_schedule( $schedules ) {
|
577 |
+
|
578 |
+
$schedules['weekly'] = array(
|
579 |
+
'interval' => DAY_IN_SECONDS * 7,
|
580 |
+
'display' => 'Once Weekly',
|
581 |
+
);
|
582 |
+
|
583 |
+
return $schedules;
|
584 |
+
}
|
585 |
+
|
586 |
+
/**
|
587 |
+
* Plugin activation hook
|
588 |
+
*
|
589 |
+
* @return void
|
590 |
+
*/
|
591 |
+
public function activate_plugin() {
|
592 |
+
$allowed = get_option( $this->client->slug . '_allow_tracking', 'no' );
|
593 |
+
|
594 |
+
// if it wasn't allowed before, do nothing
|
595 |
+
if ( 'yes' !== $allowed ) {
|
596 |
+
return;
|
597 |
+
}
|
598 |
+
|
599 |
+
// re-schedule and delete the last sent time so we could force send again
|
600 |
+
$hook_name = $this->client->slug . '_tracker_send_event';
|
601 |
+
if ( ! wp_next_scheduled( $hook_name ) ) {
|
602 |
+
wp_schedule_event( time(), 'weekly', $hook_name );
|
603 |
+
}
|
604 |
+
|
605 |
+
delete_option( $this->client->slug . '_tracking_last_send' );
|
606 |
+
|
607 |
+
$this->send_tracking_data( true );
|
608 |
+
}
|
609 |
+
|
610 |
+
/**
|
611 |
+
* Clear our options upon deactivation
|
612 |
+
*
|
613 |
+
* @return void
|
614 |
+
*/
|
615 |
+
public function deactivation_cleanup() {
|
616 |
+
$this->clear_schedule_event();
|
617 |
+
|
618 |
+
if ( 'theme' == $this->client->type ) {
|
619 |
+
delete_option( $this->client->slug . '_tracking_last_send' );
|
620 |
+
delete_option( $this->client->slug . '_allow_tracking' );
|
621 |
+
}
|
622 |
+
|
623 |
+
delete_option( $this->client->slug . '_tracking_notice' );
|
624 |
+
}
|
625 |
+
|
626 |
+
/**
|
627 |
+
* Hook into action links and modify the deactivate link
|
628 |
+
*
|
629 |
+
* @param array $links
|
630 |
+
*
|
631 |
+
* @return array
|
632 |
+
*/
|
633 |
+
public function plugin_action_links( $links ) {
|
634 |
+
|
635 |
+
if ( array_key_exists( 'deactivate', $links ) ) {
|
636 |
+
$links['deactivate'] = str_replace( '<a', '<a class="' . $this->client->slug . '-deactivate-link"', $links['deactivate'] );
|
637 |
+
}
|
638 |
+
|
639 |
+
return $links;
|
640 |
+
}
|
641 |
+
|
642 |
+
/**
|
643 |
+
* Plugin uninstall reasons
|
644 |
+
*
|
645 |
+
* @return array
|
646 |
+
*/
|
647 |
+
private function get_uninstall_reasons() {
|
648 |
+
$reasons = array(
|
649 |
+
array(
|
650 |
+
'id' => 'could-not-understand',
|
651 |
+
'text' => "I couldn't understand how to make it work",
|
652 |
+
'type' => 'textarea',
|
653 |
+
'placeholder' => 'Would you like us to assist you?'
|
654 |
+
),
|
655 |
+
array(
|
656 |
+
'id' => 'found-better-plugin',
|
657 |
+
'text' => 'I found a better plugin',
|
658 |
+
'type' => 'text',
|
659 |
+
'placeholder' => 'Which plugin?'
|
660 |
+
),
|
661 |
+
array(
|
662 |
+
'id' => 'not-have-that-feature',
|
663 |
+
'text' => 'The plugin is great, but I need specific feature that you don\'t support',
|
664 |
+
'type' => 'textarea',
|
665 |
+
'placeholder' => 'Could you tell us more about that feature?'
|
666 |
+
),
|
667 |
+
array(
|
668 |
+
'id' => 'is-not-working',
|
669 |
+
'text' => 'The plugin is not working',
|
670 |
+
'type' => 'textarea',
|
671 |
+
'placeholder' => 'Could you tell us a bit more whats not working?'
|
672 |
+
),
|
673 |
+
array(
|
674 |
+
'id' => 'looking-for-other',
|
675 |
+
'text' => "It's not what I was looking for",
|
676 |
+
'type' => '',
|
677 |
+
'placeholder' => ''
|
678 |
+
),
|
679 |
+
array(
|
680 |
+
'id' => 'did-not-work-as-expected',
|
681 |
+
'text' => "The plugin didn't work as expected",
|
682 |
+
'type' => 'textarea',
|
683 |
+
'placeholder' => 'What did you expect?'
|
684 |
+
),
|
685 |
+
array(
|
686 |
+
'id' => 'other',
|
687 |
+
'text' => 'Other',
|
688 |
+
'type' => 'textarea',
|
689 |
+
'placeholder' => 'Could you tell us a bit more?'
|
690 |
+
),
|
691 |
+
);
|
692 |
+
|
693 |
+
return $reasons;
|
694 |
+
}
|
695 |
+
|
696 |
+
/**
|
697 |
+
* Plugin deactivation uninstall reason submission
|
698 |
+
*
|
699 |
+
* @return void
|
700 |
+
*/
|
701 |
+
public function uninstall_reason_submission() {
|
702 |
+
|
703 |
+
if ( ! isset( $_POST['reason_id'] ) ) {
|
704 |
+
wp_send_json_error();
|
705 |
+
}
|
706 |
+
|
707 |
+
$current_user = wp_get_current_user();
|
708 |
+
|
709 |
+
$data = array(
|
710 |
+
'hash' => $this->client->hash,
|
711 |
+
'reason_id' => sanitize_text_field( $_POST['reason_id'] ),
|
712 |
+
'reason_info' => isset( $_REQUEST['reason_info'] ) ? trim( stripslashes( $_REQUEST['reason_info'] ) ) : '',
|
713 |
+
'site' => $this->get_site_name(),
|
714 |
+
'url' => esc_url( home_url() ),
|
715 |
+
'admin_email' => get_option( 'admin_email' ),
|
716 |
+
'user_email' => $current_user->user_email,
|
717 |
+
'first_name' => $current_user->first_name,
|
718 |
+
'last_name' => $current_user->last_name,
|
719 |
+
'server' => $this->get_server_info(),
|
720 |
+
'wp' => $this->get_wp_info(),
|
721 |
+
'ip_address' => $this->get_user_ip_address(),
|
722 |
+
'theme' => get_stylesheet(),
|
723 |
+
'version' => $this->client->project_version,
|
724 |
+
);
|
725 |
+
|
726 |
+
// Add metadata
|
727 |
+
if ( $extra = $this->get_extra_data() ) {
|
728 |
+
$data['extra'] = $extra;
|
729 |
+
}
|
730 |
+
|
731 |
+
$this->client->send_request( $data, 'deactivate' );
|
732 |
+
|
733 |
+
wp_send_json_success();
|
734 |
+
}
|
735 |
+
|
736 |
+
/**
|
737 |
+
* Handle the plugin deactivation feedback
|
738 |
+
*
|
739 |
+
* @return void
|
740 |
+
*/
|
741 |
+
public function deactivate_scripts() {
|
742 |
+
global $pagenow;
|
743 |
+
|
744 |
+
if ( 'plugins.php' != $pagenow ) {
|
745 |
+
return;
|
746 |
+
}
|
747 |
+
|
748 |
+
$reasons = $this->get_uninstall_reasons();
|
749 |
+
?>
|
750 |
+
|
751 |
+
<div class="wd-dr-modal" id="<?php echo $this->client->slug; ?>-wd-dr-modal">
|
752 |
+
<div class="wd-dr-modal-wrap">
|
753 |
+
<div class="wd-dr-modal-header">
|
754 |
+
<h3><?php $this->client->_etrans( 'If you have a moment, please let us know why you are deactivating:' ); ?></h3>
|
755 |
+
</div>
|
756 |
+
|
757 |
+
<div class="wd-dr-modal-body">
|
758 |
+
<ul class="reasons">
|
759 |
+
<?php foreach ($reasons as $reason) { ?>
|
760 |
+
<li data-type="<?php echo esc_attr( $reason['type'] ); ?>" data-placeholder="<?php echo esc_attr( $reason['placeholder'] ); ?>">
|
761 |
+
<label><input type="radio" name="selected-reason" value="<?php echo $reason['id']; ?>"> <?php echo $reason['text']; ?></label>
|
762 |
+
</li>
|
763 |
+
<?php } ?>
|
764 |
+
</ul>
|
765 |
+
<p class="wd-dr-modal-reasons-bottom">
|
766 |
+
We share your data with <a href="<?php echo 'https://appsero.com'; ?>">Appsero</a> to troubleshoot problems & make product improvements.
|
767 |
+
<a href="<?php echo 'https://appsero.com/privacy-policy'; ?>">Learn more</a> about how Appsero handles your data.
|
768 |
+
</p>
|
769 |
+
</div>
|
770 |
+
|
771 |
+
<div class="wd-dr-modal-footer">
|
772 |
+
<a href="#" class="dont-bother-me"><?php $this->client->_etrans( "I rather wouldn't say" ); ?></a>
|
773 |
+
<button class="button-secondary"><?php $this->client->_etrans( 'Submit & Deactivate' ); ?></button>
|
774 |
+
<button class="button-primary"><?php $this->client->_etrans( 'Cancel' ); ?></button>
|
775 |
+
</div>
|
776 |
+
</div>
|
777 |
+
</div>
|
778 |
+
|
779 |
+
<style type="text/css">
|
780 |
+
.wd-dr-modal {
|
781 |
+
position: fixed;
|
782 |
+
z-index: 99999;
|
783 |
+
top: 0;
|
784 |
+
right: 0;
|
785 |
+
bottom: 0;
|
786 |
+
left: 0;
|
787 |
+
background: rgba(0,0,0,0.5);
|
788 |
+
display: none;
|
789 |
+
}
|
790 |
+
|
791 |
+
.wd-dr-modal.modal-active {
|
792 |
+
display: block;
|
793 |
+
}
|
794 |
+
|
795 |
+
.wd-dr-modal-wrap {
|
796 |
+
width: 475px;
|
797 |
+
position: relative;
|
798 |
+
margin: 10% auto;
|
799 |
+
background: #fff;
|
800 |
+
}
|
801 |
+
|
802 |
+
.wd-dr-modal-header {
|
803 |
+
border-bottom: 1px solid #eee;
|
804 |
+
padding: 8px 20px;
|
805 |
+
}
|
806 |
+
|
807 |
+
.wd-dr-modal-header h3 {
|
808 |
+
line-height: 150%;
|
809 |
+
margin: 0;
|
810 |
+
}
|
811 |
+
|
812 |
+
.wd-dr-modal-body {
|
813 |
+
padding: 5px 20px 20px 20px;
|
814 |
+
}
|
815 |
+
|
816 |
+
.wd-dr-modal-body .reason-input {
|
817 |
+
margin-top: 5px;
|
818 |
+
margin-left: 20px;
|
819 |
+
}
|
820 |
+
.wd-dr-modal-footer {
|
821 |
+
border-top: 1px solid #eee;
|
822 |
+
padding: 12px 20px;
|
823 |
+
text-align: right;
|
824 |
+
}
|
825 |
+
.wd-dr-modal-reasons-bottom {
|
826 |
+
margin: 15px 0 0 0;
|
827 |
+
}
|
828 |
+
</style>
|
829 |
+
|
830 |
+
<script type="text/javascript">
|
831 |
+
(function($) {
|
832 |
+
$(function() {
|
833 |
+
var modal = $( '#<?php echo $this->client->slug; ?>-wd-dr-modal' );
|
834 |
+
var deactivateLink = '';
|
835 |
+
|
836 |
+
$( '#the-list' ).on('click', 'a.<?php echo $this->client->slug; ?>-deactivate-link', function(e) {
|
837 |
+
e.preventDefault();
|
838 |
+
|
839 |
+
modal.addClass('modal-active');
|
840 |
+
deactivateLink = $(this).attr('href');
|
841 |
+
modal.find('a.dont-bother-me').attr('href', deactivateLink).css('float', 'left');
|
842 |
+
});
|
843 |
+
|
844 |
+
modal.on('click', 'button.button-primary', function(e) {
|
845 |
+
e.preventDefault();
|
846 |
+
|
847 |
+
modal.removeClass('modal-active');
|
848 |
+
});
|
849 |
+
|
850 |
+
modal.on('click', 'input[type="radio"]', function () {
|
851 |
+
var parent = $(this).parents('li:first');
|
852 |
+
|
853 |
+
modal.find('.reason-input').remove();
|
854 |
+
|
855 |
+
var inputType = parent.data('type'),
|
856 |
+
inputPlaceholder = parent.data('placeholder'),
|
857 |
+
reasonInputHtml = '<div class="reason-input">' + ( ( 'text' === inputType ) ? '<input type="text" size="40" />' : '<textarea rows="5" cols="45"></textarea>' ) + '</div>';
|
858 |
+
|
859 |
+
if ( inputType !== '' ) {
|
860 |
+
parent.append( $(reasonInputHtml) );
|
861 |
+
parent.find('input, textarea').attr('placeholder', inputPlaceholder).focus();
|
862 |
+
}
|
863 |
+
});
|
864 |
+
|
865 |
+
modal.on('click', 'button.button-secondary', function(e) {
|
866 |
+
e.preventDefault();
|
867 |
+
|
868 |
+
var button = $(this);
|
869 |
+
|
870 |
+
if ( button.hasClass('disabled') ) {
|
871 |
+
return;
|
872 |
+
}
|
873 |
+
|
874 |
+
var $radio = $( 'input[type="radio"]:checked', modal );
|
875 |
+
|
876 |
+
var $selected_reason = $radio.parents('li:first'),
|
877 |
+
$input = $selected_reason.find('textarea, input[type="text"]');
|
878 |
+
|
879 |
+
$.ajax({
|
880 |
+
url: ajaxurl,
|
881 |
+
type: 'POST',
|
882 |
+
data: {
|
883 |
+
action: '<?php echo $this->client->slug; ?>_submit-uninstall-reason',
|
884 |
+
reason_id: ( 0 === $radio.length ) ? 'none' : $radio.val(),
|
885 |
+
reason_info: ( 0 !== $input.length ) ? $input.val().trim() : ''
|
886 |
+
},
|
887 |
+
beforeSend: function() {
|
888 |
+
button.addClass('disabled');
|
889 |
+
button.text('Processing...');
|
890 |
+
},
|
891 |
+
complete: function() {
|
892 |
+
window.location.href = deactivateLink;
|
893 |
+
}
|
894 |
+
});
|
895 |
+
});
|
896 |
+
});
|
897 |
+
}(jQuery));
|
898 |
+
</script>
|
899 |
+
|
900 |
+
<?php
|
901 |
+
}
|
902 |
+
|
903 |
+
/**
|
904 |
+
* Run after theme deactivated
|
905 |
+
* @param string $new_name
|
906 |
+
* @param object $new_theme
|
907 |
+
* @param object $old_theme
|
908 |
+
* @return void
|
909 |
+
*/
|
910 |
+
public function theme_deactivated( $new_name, $new_theme, $old_theme ) {
|
911 |
+
// Make sure this is appsero theme
|
912 |
+
if ( $old_theme->get_template() == $this->client->slug ) {
|
913 |
+
$current_user = wp_get_current_user();
|
914 |
+
|
915 |
+
$data = array(
|
916 |
+
'hash' => $this->client->hash,
|
917 |
+
'reason_id' => 'none',
|
918 |
+
'reason_info' => '',
|
919 |
+
'site' => $this->get_site_name(),
|
920 |
+
'url' => esc_url( home_url() ),
|
921 |
+
'admin_email' => get_option( 'admin_email' ),
|
922 |
+
'user_email' => $current_user->user_email,
|
923 |
+
'first_name' => $current_user->first_name,
|
924 |
+
'last_name' => $current_user->last_name,
|
925 |
+
'server' => $this->get_server_info(),
|
926 |
+
'wp' => $this->get_wp_info(),
|
927 |
+
'ip_address' => $this->get_user_ip_address(),
|
928 |
+
'theme' => get_stylesheet(),
|
929 |
+
'version' => $this->client->project_version,
|
930 |
+
);
|
931 |
+
|
932 |
+
$this->client->send_request( $data, 'deactivate' );
|
933 |
+
}
|
934 |
+
}
|
935 |
+
|
936 |
+
/**
|
937 |
+
* Get user IP Address
|
938 |
+
*/
|
939 |
+
private function get_user_ip_address() {
|
940 |
+
$response = wp_remote_get( 'https://icanhazip.com/' );
|
941 |
+
|
942 |
+
if ( is_wp_error( $response ) ) {
|
943 |
+
return '';
|
944 |
+
}
|
945 |
+
|
946 |
+
$ip = trim( wp_remote_retrieve_body( $response ) );
|
947 |
+
|
948 |
+
if ( ! filter_var( $ip, FILTER_VALIDATE_IP ) ) {
|
949 |
+
return '';
|
950 |
+
}
|
951 |
+
|
952 |
+
return $ip;
|
953 |
+
}
|
954 |
+
|
955 |
+
/**
|
956 |
+
* Get site name
|
957 |
+
*/
|
958 |
+
private function get_site_name() {
|
959 |
+
$site_name = get_bloginfo( 'name' );
|
960 |
+
|
961 |
+
if ( empty( $site_name ) ) {
|
962 |
+
$site_name = get_bloginfo( 'description' );
|
963 |
+
$site_name = wp_trim_words( $site_name, 3, '' );
|
964 |
+
}
|
965 |
+
|
966 |
+
if ( empty( $site_name ) ) {
|
967 |
+
$site_name = esc_url( home_url() );
|
968 |
+
}
|
969 |
+
|
970 |
+
return $site_name;
|
971 |
+
}
|
972 |
+
}
|
include/appsero/src/License.php
ADDED
@@ -0,0 +1,705 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Appsero;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Appsero License Checker
|
6 |
+
*
|
7 |
+
* This class will check, active and deactive license
|
8 |
+
*/
|
9 |
+
class License {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* AppSero\Client
|
13 |
+
*
|
14 |
+
* @var object
|
15 |
+
*/
|
16 |
+
protected $client;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Arguments of create menu
|
20 |
+
*
|
21 |
+
* @var array
|
22 |
+
*/
|
23 |
+
protected $menu_args;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* `option_name` of `wp_options` table
|
27 |
+
*
|
28 |
+
* @var string
|
29 |
+
*/
|
30 |
+
protected $option_key;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Error message of HTTP request
|
34 |
+
*
|
35 |
+
* @var string
|
36 |
+
*/
|
37 |
+
public $error;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Success message on form submit
|
41 |
+
*
|
42 |
+
* @var string
|
43 |
+
*/
|
44 |
+
public $success;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Corn schedule hook name
|
48 |
+
*
|
49 |
+
* @var string
|
50 |
+
*/
|
51 |
+
protected $schedule_hook;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Set value for valid licnese
|
55 |
+
*
|
56 |
+
* @var boolean
|
57 |
+
*/
|
58 |
+
private $is_valid_licnese = null;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Initialize the class
|
62 |
+
*
|
63 |
+
* @param Appsero\Client
|
64 |
+
*/
|
65 |
+
public function __construct( Client $client ) {
|
66 |
+
$this->client = $client;
|
67 |
+
|
68 |
+
$this->option_key = 'appsero_' . md5( $this->client->slug ) . '_manage_license';
|
69 |
+
|
70 |
+
$this->schedule_hook = $this->client->slug . '_license_check_event';
|
71 |
+
|
72 |
+
// Run hook to check license status daily
|
73 |
+
add_action( $this->schedule_hook, array( $this, 'check_license_status' ) );
|
74 |
+
|
75 |
+
// Active/Deactive corn schedule
|
76 |
+
$this->run_schedule();
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Check license
|
81 |
+
*
|
82 |
+
* @return boolean
|
83 |
+
*/
|
84 |
+
public function check( $license_key ) {
|
85 |
+
$route = 'public/license/' . $this->client->hash . '/check';
|
86 |
+
|
87 |
+
return $this->send_request( $license_key, $route );
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Active a license
|
92 |
+
*
|
93 |
+
* @return boolean
|
94 |
+
*/
|
95 |
+
public function activate( $license_key ) {
|
96 |
+
$route = 'public/license/' . $this->client->hash . '/activate';
|
97 |
+
|
98 |
+
return $this->send_request( $license_key, $route );
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Deactivate a license
|
103 |
+
*
|
104 |
+
* @return boolean
|
105 |
+
*/
|
106 |
+
public function deactivate( $license_key ) {
|
107 |
+
$route = 'public/license/' . $this->client->hash . '/deactivate';
|
108 |
+
|
109 |
+
return $this->send_request( $license_key, $route );
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Send common request
|
114 |
+
*
|
115 |
+
* @param $license_key
|
116 |
+
* @param $route
|
117 |
+
*
|
118 |
+
* @return array
|
119 |
+
*/
|
120 |
+
protected function send_request( $license_key, $route ) {
|
121 |
+
$params = array(
|
122 |
+
'license_key' => $license_key,
|
123 |
+
'url' => esc_url( home_url() ),
|
124 |
+
'is_local' => $this->client->is_local_server(),
|
125 |
+
);
|
126 |
+
|
127 |
+
$response = $this->client->send_request( $params, $route, true );
|
128 |
+
|
129 |
+
if ( is_wp_error( $response ) ) {
|
130 |
+
return array(
|
131 |
+
'success' => false,
|
132 |
+
'error' => $response->get_error_message()
|
133 |
+
);
|
134 |
+
}
|
135 |
+
|
136 |
+
$response = json_decode( wp_remote_retrieve_body( $response ), true );
|
137 |
+
|
138 |
+
if ( empty( $response ) || isset( $response['exception'] )) {
|
139 |
+
return array(
|
140 |
+
'success' => false,
|
141 |
+
'error' => 'Unknown error occurred, Please try again.'
|
142 |
+
);
|
143 |
+
}
|
144 |
+
|
145 |
+
if ( isset( $response['errors'] ) && isset( $response['errors']['license_key'] ) ) {
|
146 |
+
$response = array(
|
147 |
+
'success' => false,
|
148 |
+
'error' => $response['errors']['license_key'][0]
|
149 |
+
);
|
150 |
+
}
|
151 |
+
|
152 |
+
return $response;
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Add settings page for license
|
157 |
+
*
|
158 |
+
* @param array $args
|
159 |
+
*
|
160 |
+
* @return void
|
161 |
+
*/
|
162 |
+
public function add_settings_page( $args = array() ) {
|
163 |
+
$defaults = array(
|
164 |
+
'type' => 'menu', // Can be: menu, options, submenu
|
165 |
+
'page_title' => 'Manage License',
|
166 |
+
'menu_title' => 'Manage License',
|
167 |
+
'capability' => 'manage_options',
|
168 |
+
'menu_slug' => $this->client->slug . '-manage-license',
|
169 |
+
'icon_url' => '',
|
170 |
+
'position' => null,
|
171 |
+
'parent_slug' => '',
|
172 |
+
);
|
173 |
+
|
174 |
+
$this->menu_args = wp_parse_args( $args, $defaults );
|
175 |
+
|
176 |
+
add_action( 'admin_menu', array( $this, 'admin_menu' ), 99 );
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Admin Menu hook
|
181 |
+
*
|
182 |
+
* @return void
|
183 |
+
*/
|
184 |
+
public function admin_menu() {
|
185 |
+
switch ( $this->menu_args['type'] ) {
|
186 |
+
case 'menu':
|
187 |
+
$this->create_menu_page();
|
188 |
+
break;
|
189 |
+
|
190 |
+
case 'submenu':
|
191 |
+
$this->create_submenu_page();
|
192 |
+
break;
|
193 |
+
|
194 |
+
case 'options':
|
195 |
+
$this->create_options_page();
|
196 |
+
break;
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
+
/**
|
201 |
+
* License menu output
|
202 |
+
*/
|
203 |
+
public function menu_output() {
|
204 |
+
|
205 |
+
if ( isset( $_POST['submit'] ) ) {
|
206 |
+
$this->license_form_submit( $_POST );
|
207 |
+
}
|
208 |
+
|
209 |
+
$license = get_option( $this->option_key, null );
|
210 |
+
$action = ( $license && isset( $license['status'] ) && 'activate' == $license['status'] ) ? 'deactive' : 'active';
|
211 |
+
$this->licenses_style();
|
212 |
+
?>
|
213 |
+
|
214 |
+
<div class="wrap appsero-license-settings-wrapper">
|
215 |
+
<h1>License Settings</h1>
|
216 |
+
|
217 |
+
<?php
|
218 |
+
$this->show_license_page_notices();
|
219 |
+
do_action( 'before_appsero_license_section' );
|
220 |
+
?>
|
221 |
+
|
222 |
+
<div class="appsero-license-settings appsero-license-section">
|
223 |
+
<?php $this->show_license_page_card_header(); ?>
|
224 |
+
|
225 |
+
<div class="appsero-license-details">
|
226 |
+
<p>Activate <strong><?php echo $this->client->name; ?></strong> by your license key to get professional support and automatic update from your WordPress dashboard.</p>
|
227 |
+
<form method="post" action="<?php $this->formActionUrl(); ?>" novalidate="novalidate" spellcheck="false">
|
228 |
+
<input type="hidden" name="_action" value="<?php echo $action; ?>">
|
229 |
+
<input type="hidden" name="_nonce" value="<?php echo wp_create_nonce( $this->client->name ); ?>">
|
230 |
+
<div class="license-input-fields">
|
231 |
+
<div class="license-input-key">
|
232 |
+
<svg enable-background="new 0 0 512 512" version="1.1" viewBox="0 0 512 512" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
233 |
+
<path d="m463.75 48.251c-64.336-64.336-169.01-64.335-233.35 1e-3 -43.945 43.945-59.209 108.71-40.181 167.46l-185.82 185.82c-2.813 2.813-4.395 6.621-4.395 10.606v84.858c0 8.291 6.709 15 15 15h84.858c3.984 0 7.793-1.582 10.605-4.395l21.211-21.226c3.237-3.237 4.819-7.778 4.292-12.334l-2.637-22.793 31.582-2.974c7.178-0.674 12.847-6.343 13.521-13.521l2.974-31.582 22.793 2.651c4.233 0.571 8.496-0.85 11.704-3.691 3.193-2.856 5.024-6.929 5.024-11.206v-27.929h27.422c3.984 0 7.793-1.582 10.605-4.395l38.467-37.958c58.74 19.043 122.38 4.929 166.33-39.046 64.336-64.335 64.336-169.01 0-233.35zm-42.435 106.07c-17.549 17.549-46.084 17.549-63.633 0s-17.549-46.084 0-63.633 46.084-17.549 63.633 0 17.548 46.084 0 63.633z"/>
|
234 |
+
</svg>
|
235 |
+
<input type="text" value="<?php echo $this->get_input_license_value( $action, $license ); ?>"
|
236 |
+
placeholder="Enter your license key to activate" name="license_key"
|
237 |
+
<?php echo ( 'deactive' == $action ) ? 'readonly="readonly"' : ''; ?>
|
238 |
+
/>
|
239 |
+
</div>
|
240 |
+
<button type="submit" name="submit" class="<?php echo 'deactive' == $action ? 'deactive-button' : ''; ?>">
|
241 |
+
<?php echo $action == 'active' ? 'Activate License' : 'Deactivate License' ; ?>
|
242 |
+
</button>
|
243 |
+
</div>
|
244 |
+
</form>
|
245 |
+
|
246 |
+
<?php
|
247 |
+
if ( 'deactive' == $action && isset( $license['remaining'] ) ) {
|
248 |
+
$this->show_active_license_info( $license );
|
249 |
+
}
|
250 |
+
?>
|
251 |
+
</div>
|
252 |
+
</div> <!-- /.appsero-license-settings -->
|
253 |
+
|
254 |
+
<?php do_action( 'after_appsero_license_section' ); ?>
|
255 |
+
</div>
|
256 |
+
<?php
|
257 |
+
}
|
258 |
+
|
259 |
+
/**
|
260 |
+
* License form submit
|
261 |
+
*/
|
262 |
+
public function license_form_submit( $form ) {
|
263 |
+
if ( ! isset( $form['_nonce'], $form['_action'] ) ) {
|
264 |
+
$this->error = "Please add all information";
|
265 |
+
return;
|
266 |
+
}
|
267 |
+
|
268 |
+
if ( ! wp_verify_nonce( $form['_nonce'], $this->client->name ) ) {
|
269 |
+
$this->error = "You don't have permission to manage license.";
|
270 |
+
return;
|
271 |
+
}
|
272 |
+
|
273 |
+
switch ( $form['_action'] ) {
|
274 |
+
case 'active':
|
275 |
+
$this->active_client_license( $form );
|
276 |
+
break;
|
277 |
+
|
278 |
+
case 'deactive':
|
279 |
+
$this->deactive_client_license( $form );
|
280 |
+
break;
|
281 |
+
}
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Check license status on schedule
|
286 |
+
*/
|
287 |
+
public function check_license_status() {
|
288 |
+
$license = get_option( $this->option_key, null );
|
289 |
+
|
290 |
+
if ( isset( $license['key'] ) && ! empty( $license['key'] ) ) {
|
291 |
+
$response = $this->check( $license['key'] );
|
292 |
+
|
293 |
+
if ( isset( $response['success'] ) && $response['success'] ) {
|
294 |
+
$license['status'] = 'activate';
|
295 |
+
$license['remaining'] = $response['remaining'];
|
296 |
+
$license['activation_limit'] = $response['activation_limit'];
|
297 |
+
$license['expiry_days'] = $response['expiry_days'];
|
298 |
+
$license['title'] = $response['title'];
|
299 |
+
$license['source_id'] = $response['source_identifier'];
|
300 |
+
$license['recurring'] = $response['recurring'];
|
301 |
+
} else {
|
302 |
+
$license['status'] = 'deactivate';
|
303 |
+
$license['expiry_days'] = 0;
|
304 |
+
}
|
305 |
+
|
306 |
+
update_option( $this->option_key, $license, false );
|
307 |
+
}
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Check this is a valid license
|
312 |
+
*/
|
313 |
+
public function is_valid() {
|
314 |
+
if ( null !== $this->is_valid_licnese ) {
|
315 |
+
return $this->is_valid_licnese;
|
316 |
+
}
|
317 |
+
|
318 |
+
$license = get_option( $this->option_key, null );
|
319 |
+
if ( ! empty( $license['key'] ) && isset( $license['status'] ) && $license['status'] == 'activate' ) {
|
320 |
+
$this->is_valid_licnese = true;
|
321 |
+
} else {
|
322 |
+
$this->is_valid_licnese = false;
|
323 |
+
}
|
324 |
+
|
325 |
+
return $this->is_valid_licnese;
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Check this is a valid license
|
330 |
+
*/
|
331 |
+
public function is_valid_by( $option, $value ) {
|
332 |
+
$license = get_option( $this->option_key, null );
|
333 |
+
|
334 |
+
if ( ! empty( $license['key'] ) && isset( $license['status'] ) && $license['status'] == 'activate' ) {
|
335 |
+
if ( isset( $license[ $option ] ) && $license[ $option ] == $value ) {
|
336 |
+
return true;
|
337 |
+
}
|
338 |
+
}
|
339 |
+
|
340 |
+
return false;
|
341 |
+
}
|
342 |
+
|
343 |
+
/**
|
344 |
+
* Styles for licenses page
|
345 |
+
*/
|
346 |
+
private function licenses_style() {
|
347 |
+
?>
|
348 |
+
<style type="text/css">
|
349 |
+
.appsero-license-section {
|
350 |
+
width: 100%;
|
351 |
+
max-width: 1100px;
|
352 |
+
min-height: 1px;
|
353 |
+
box-sizing: border-box;
|
354 |
+
}
|
355 |
+
.appsero-license-settings {
|
356 |
+
background-color: #fff;
|
357 |
+
box-shadow: 0px 3px 10px rgba(16, 16, 16, 0.05);
|
358 |
+
}
|
359 |
+
.appsero-license-settings * {
|
360 |
+
box-sizing: border-box;
|
361 |
+
}
|
362 |
+
.appsero-license-title {
|
363 |
+
background-color: #F8FAFB;
|
364 |
+
border-bottom: 2px solid #EAEAEA;
|
365 |
+
display: flex;
|
366 |
+
align-items: center;
|
367 |
+
padding: 10px 20px;
|
368 |
+
}
|
369 |
+
.appsero-license-title svg {
|
370 |
+
width: 30px;
|
371 |
+
height: 30px;
|
372 |
+
fill: #0082BF;
|
373 |
+
}
|
374 |
+
.appsero-license-title span {
|
375 |
+
font-size: 17px;
|
376 |
+
color: #444444;
|
377 |
+
margin-left: 10px;
|
378 |
+
}
|
379 |
+
.appsero-license-details {
|
380 |
+
padding: 20px;
|
381 |
+
}
|
382 |
+
.appsero-license-details p {
|
383 |
+
font-size: 15px;
|
384 |
+
margin: 0 0 20px 0;
|
385 |
+
}
|
386 |
+
.license-input-key {
|
387 |
+
position: relative;
|
388 |
+
flex: 0 0 72%;
|
389 |
+
max-width: 72%;
|
390 |
+
}
|
391 |
+
.license-input-key input {
|
392 |
+
background-color: #F9F9F9;
|
393 |
+
padding: 10px 15px 10px 48px;
|
394 |
+
border: 1px solid #E8E5E5;
|
395 |
+
border-radius: 3px;
|
396 |
+
height: 45px;
|
397 |
+
font-size: 16px;
|
398 |
+
color: #71777D;
|
399 |
+
width: 100%;
|
400 |
+
box-shadow: 0 0 0 transparent;
|
401 |
+
}
|
402 |
+
.license-input-key input:focus {
|
403 |
+
outline: 0 none;
|
404 |
+
border: 1px solid #E8E5E5;
|
405 |
+
box-shadow: 0 0 0 transparent;
|
406 |
+
}
|
407 |
+
.license-input-key svg {
|
408 |
+
width: 22px;
|
409 |
+
height: 22px;
|
410 |
+
fill: #0082BF;
|
411 |
+
position: absolute;
|
412 |
+
left: 14px;
|
413 |
+
top: 13px;
|
414 |
+
}
|
415 |
+
.license-input-fields {
|
416 |
+
display: flex;
|
417 |
+
justify-content: space-between;
|
418 |
+
margin-bottom: 30px;
|
419 |
+
max-width: 850px;
|
420 |
+
width: 100%;
|
421 |
+
}
|
422 |
+
.license-input-fields button {
|
423 |
+
color: #fff;
|
424 |
+
font-size: 17px;
|
425 |
+
padding: 8px;
|
426 |
+
height: 46px;
|
427 |
+
background-color: #0082BF;
|
428 |
+
border-radius: 3px;
|
429 |
+
cursor: pointer;
|
430 |
+
flex: 0 0 25%;
|
431 |
+
max-width: 25%;
|
432 |
+
border: 1px solid #0082BF;
|
433 |
+
}
|
434 |
+
.license-input-fields button.deactive-button {
|
435 |
+
background-color: #E40055;
|
436 |
+
border-color: #E40055;
|
437 |
+
}
|
438 |
+
.license-input-fields button:focus {
|
439 |
+
outline: 0 none;
|
440 |
+
}
|
441 |
+
.active-license-info {
|
442 |
+
display: flex;
|
443 |
+
}
|
444 |
+
.single-license-info {
|
445 |
+
min-width: 220px;
|
446 |
+
flex: 0 0 30%;
|
447 |
+
}
|
448 |
+
.single-license-info h3 {
|
449 |
+
font-size: 18px;
|
450 |
+
margin: 0 0 12px 0;
|
451 |
+
}
|
452 |
+
.single-license-info p {
|
453 |
+
margin: 0;
|
454 |
+
color: #00C000;
|
455 |
+
}
|
456 |
+
.single-license-info p.occupied {
|
457 |
+
color: #E40055;
|
458 |
+
}
|
459 |
+
</style>
|
460 |
+
<?php
|
461 |
+
}
|
462 |
+
|
463 |
+
/**
|
464 |
+
* Show active license information
|
465 |
+
*/
|
466 |
+
private function show_active_license_info( $license ) {
|
467 |
+
?>
|
468 |
+
<div class="active-license-info">
|
469 |
+
<div class="single-license-info">
|
470 |
+
<h3>Activation Remaining</h3>
|
471 |
+
<?php if ( empty( $license['activation_limit'] ) ): ?>
|
472 |
+
<p>Unlimited</p>
|
473 |
+
<?php else: ?>
|
474 |
+
<p class="<?php echo $license['remaining'] ? '' : 'occupied'; ?>">
|
475 |
+
<?php echo $license['remaining']; ?> out of <?php echo $license['activation_limit']; ?>
|
476 |
+
</p>
|
477 |
+
<?php endif; ?>
|
478 |
+
</div>
|
479 |
+
<div class="single-license-info">
|
480 |
+
<h3>Expires in</h3>
|
481 |
+
<?php
|
482 |
+
if ( $license['recurring'] && false !== $license['expiry_days'] ) {
|
483 |
+
$occupied = $license['expiry_days'] > 10 ? '' : 'occupied';
|
484 |
+
echo '<p class="' . $occupied . '">' . $license['expiry_days'] . ' days</p>';
|
485 |
+
} else {
|
486 |
+
echo '<p>Never</p>';
|
487 |
+
}
|
488 |
+
?>
|
489 |
+
</div>
|
490 |
+
</div>
|
491 |
+
<?php
|
492 |
+
}
|
493 |
+
|
494 |
+
/**
|
495 |
+
* Show license settings page notices
|
496 |
+
*/
|
497 |
+
private function show_license_page_notices() {
|
498 |
+
if ( ! empty( $this->error ) ) :
|
499 |
+
?>
|
500 |
+
<div class="notice notice-error is-dismissible appsero-license-section">
|
501 |
+
<p><?php echo $this->error; ?></p>
|
502 |
+
</div>
|
503 |
+
<?php
|
504 |
+
endif;
|
505 |
+
if ( ! empty( $this->success ) ) :
|
506 |
+
?>
|
507 |
+
<div class="notice notice-success is-dismissible appsero-license-section">
|
508 |
+
<p><?php echo $this->success; ?></p>
|
509 |
+
</div>
|
510 |
+
<?php
|
511 |
+
endif;
|
512 |
+
echo '<br />';
|
513 |
+
}
|
514 |
+
|
515 |
+
/**
|
516 |
+
* Card header
|
517 |
+
*/
|
518 |
+
private function show_license_page_card_header() {
|
519 |
+
?>
|
520 |
+
<div class="appsero-license-title">
|
521 |
+
<svg enable-background="new 0 0 299.995 299.995" version="1.1" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
522 |
+
<path d="m150 161.48c-8.613 0-15.598 6.982-15.598 15.598 0 5.776 3.149 10.807 7.817 13.505v17.341h15.562v-17.341c4.668-2.697 7.817-7.729 7.817-13.505 0-8.616-6.984-15.598-15.598-15.598z"/>
|
523 |
+
<path d="m150 85.849c-13.111 0-23.775 10.665-23.775 23.775v25.319h47.548v-25.319c-1e-3 -13.108-10.665-23.775-23.773-23.775z"/>
|
524 |
+
<path d="m150 1e-3c-82.839 0-150 67.158-150 150 0 82.837 67.156 150 150 150s150-67.161 150-150c0-82.839-67.161-150-150-150zm46.09 227.12h-92.173c-9.734 0-17.626-7.892-17.626-17.629v-56.919c0-8.491 6.007-15.582 14.003-17.25v-25.697c0-27.409 22.3-49.711 49.711-49.711 27.409 0 49.709 22.3 49.709 49.711v25.697c7.993 1.673 14 8.759 14 17.25v56.919h2e-3c0 9.736-7.892 17.629-17.626 17.629z"/>
|
525 |
+
</svg>
|
526 |
+
<span>Activate License</span>
|
527 |
+
</div>
|
528 |
+
<?php
|
529 |
+
}
|
530 |
+
|
531 |
+
/**
|
532 |
+
* Active client license
|
533 |
+
*/
|
534 |
+
private function active_client_license( $form ) {
|
535 |
+
if ( empty( $form['license_key'] ) ) {
|
536 |
+
$this->error = 'The license key field is required.';
|
537 |
+
return;
|
538 |
+
}
|
539 |
+
|
540 |
+
$license_key = sanitize_text_field( $form['license_key'] );
|
541 |
+
$response = $this->activate( $license_key );
|
542 |
+
|
543 |
+
if ( ! $response['success'] ) {
|
544 |
+
$this->error = $response['error'] ? $response['error'] : 'Unknown error occurred.';
|
545 |
+
return;
|
546 |
+
}
|
547 |
+
|
548 |
+
$data = array(
|
549 |
+
'key' => $license_key,
|
550 |
+
'status' => 'activate',
|
551 |
+
'remaining' => $response['remaining'],
|
552 |
+
'activation_limit' => $response['activation_limit'],
|
553 |
+
'expiry_days' => $response['expiry_days'],
|
554 |
+
'title' => $response['title'],
|
555 |
+
'source_id' => $response['source_identifier'],
|
556 |
+
'recurring' => $response['recurring'],
|
557 |
+
);
|
558 |
+
|
559 |
+
update_option( $this->option_key, $data, false );
|
560 |
+
|
561 |
+
$this->success = 'License activated successfully.';
|
562 |
+
}
|
563 |
+
|
564 |
+
/**
|
565 |
+
* Deactive client license
|
566 |
+
*/
|
567 |
+
private function deactive_client_license( $form ) {
|
568 |
+
$license = get_option( $this->option_key, null );
|
569 |
+
|
570 |
+
if ( empty( $license['key'] ) ) {
|
571 |
+
$this->error = 'License key not found.';
|
572 |
+
return;
|
573 |
+
}
|
574 |
+
|
575 |
+
$response = $this->deactivate( $license['key'] );
|
576 |
+
|
577 |
+
$data = array(
|
578 |
+
'key' => '',
|
579 |
+
'status' => 'deactivate',
|
580 |
+
);
|
581 |
+
|
582 |
+
update_option( $this->option_key, $data, false );
|
583 |
+
|
584 |
+
if ( ! $response['success'] ) {
|
585 |
+
$this->error = $response['error'] ? $response['error'] : 'Unknown error occurred.';
|
586 |
+
return;
|
587 |
+
}
|
588 |
+
|
589 |
+
$this->success = 'License deactivated successfully.';
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* Add license menu page
|
594 |
+
*/
|
595 |
+
private function create_menu_page() {
|
596 |
+
call_user_func(
|
597 |
+
'add_' . 'menu' . '_page',
|
598 |
+
$this->menu_args['page_title'],
|
599 |
+
$this->menu_args['menu_title'],
|
600 |
+
$this->menu_args['capability'],
|
601 |
+
$this->menu_args['menu_slug'],
|
602 |
+
array( $this, 'menu_output' ),
|
603 |
+
$this->menu_args['icon_url'],
|
604 |
+
$this->menu_args['position']
|
605 |
+
);
|
606 |
+
}
|
607 |
+
|
608 |
+
/**
|
609 |
+
* Add submenu page
|
610 |
+
*/
|
611 |
+
private function create_submenu_page() {
|
612 |
+
call_user_func(
|
613 |
+
'add_' . 'submenu' . '_page',
|
614 |
+
$this->menu_args['parent_slug'],
|
615 |
+
$this->menu_args['page_title'],
|
616 |
+
$this->menu_args['menu_title'],
|
617 |
+
$this->menu_args['capability'],
|
618 |
+
$this->menu_args['menu_slug'],
|
619 |
+
array( $this, 'menu_output' ),
|
620 |
+
$this->menu_args['position']
|
621 |
+
);
|
622 |
+
}
|
623 |
+
|
624 |
+
/**
|
625 |
+
* Add submenu page
|
626 |
+
*/
|
627 |
+
private function create_options_page() {
|
628 |
+
call_user_func(
|
629 |
+
'add_' . 'options' . '_page',
|
630 |
+
$this->menu_args['page_title'],
|
631 |
+
$this->menu_args['menu_title'],
|
632 |
+
$this->menu_args['capability'],
|
633 |
+
$this->menu_args['menu_slug'],
|
634 |
+
array( $this, 'menu_output' ),
|
635 |
+
$this->menu_args['position']
|
636 |
+
);
|
637 |
+
}
|
638 |
+
|
639 |
+
/**
|
640 |
+
* Schedule daily sicense checker event
|
641 |
+
*/
|
642 |
+
public function schedule_cron_event() {
|
643 |
+
if ( ! wp_next_scheduled( $this->schedule_hook ) ) {
|
644 |
+
wp_schedule_event( time(), 'daily', $this->schedule_hook );
|
645 |
+
|
646 |
+
wp_schedule_single_event( time() + 20, $this->schedule_hook );
|
647 |
+
}
|
648 |
+
}
|
649 |
+
|
650 |
+
/**
|
651 |
+
* Clear any scheduled hook
|
652 |
+
*/
|
653 |
+
public function clear_scheduler() {
|
654 |
+
wp_clear_scheduled_hook( $this->schedule_hook );
|
655 |
+
}
|
656 |
+
|
657 |
+
/**
|
658 |
+
* Enable/Disable schedule
|
659 |
+
*/
|
660 |
+
private function run_schedule() {
|
661 |
+
switch ( $this->client->type ) {
|
662 |
+
case 'plugin':
|
663 |
+
register_activation_hook( $this->client->file, array( $this, 'schedule_cron_event' ) );
|
664 |
+
register_deactivation_hook( $this->client->file, array( $this, 'clear_scheduler' ) );
|
665 |
+
break;
|
666 |
+
|
667 |
+
case 'theme':
|
668 |
+
add_action( 'after_switch_theme', array( $this, 'schedule_cron_event' ) );
|
669 |
+
add_action( 'switch_theme', array( $this, 'clear_scheduler' ) );
|
670 |
+
break;
|
671 |
+
}
|
672 |
+
}
|
673 |
+
|
674 |
+
/**
|
675 |
+
* Form action URL
|
676 |
+
*/
|
677 |
+
private function formActionUrl() {
|
678 |
+
echo add_query_arg(
|
679 |
+
array( 'page' => $_GET['page'] ),
|
680 |
+
admin_url( basename( $_SERVER['SCRIPT_NAME'] ) )
|
681 |
+
);
|
682 |
+
}
|
683 |
+
|
684 |
+
/**
|
685 |
+
* Get input license key
|
686 |
+
* @param $action
|
687 |
+
* @return $license
|
688 |
+
*/
|
689 |
+
private function get_input_license_value( $action, $license ) {
|
690 |
+
if ( 'active' == $action ) {
|
691 |
+
return isset( $license['key'] ) ? $license['key'] : '';
|
692 |
+
}
|
693 |
+
|
694 |
+
if ( 'deactive' == $action ) {
|
695 |
+
$key_length = strlen( $license['key'] );
|
696 |
+
|
697 |
+
return str_pad(
|
698 |
+
substr( $license['key'], 0, $key_length / 2 ), $key_length, '*'
|
699 |
+
);
|
700 |
+
}
|
701 |
+
|
702 |
+
return '';
|
703 |
+
}
|
704 |
+
|
705 |
+
}
|
include/appsero/src/Updater.php
ADDED
@@ -0,0 +1,247 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Appsero;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Appsero Updater
|
6 |
+
*
|
7 |
+
* This class will show new updates project
|
8 |
+
*/
|
9 |
+
class Updater {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Appsero\Client
|
13 |
+
*
|
14 |
+
* @var object
|
15 |
+
*/
|
16 |
+
protected $client;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Initialize the class
|
20 |
+
*
|
21 |
+
* @param Appsero\Client
|
22 |
+
*/
|
23 |
+
public function __construct( Client $client ) {
|
24 |
+
|
25 |
+
$this->client = $client;
|
26 |
+
$this->cache_key = 'appsero_' . md5( $this->client->slug ) . '_version_info';
|
27 |
+
|
28 |
+
// Run hooks.
|
29 |
+
if ( $this->client->type == 'plugin' ) {
|
30 |
+
$this->run_plugin_hooks();
|
31 |
+
} elseif ( $this->client->type == 'theme' ) {
|
32 |
+
$this->run_theme_hooks();
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Set up WordPress filter to hooks to get update.
|
38 |
+
*
|
39 |
+
* @return void
|
40 |
+
*/
|
41 |
+
public function run_plugin_hooks() {
|
42 |
+
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_plugin_update' ) );
|
43 |
+
add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Set up WordPress filter to hooks to get update.
|
48 |
+
*
|
49 |
+
* @return void
|
50 |
+
*/
|
51 |
+
public function run_theme_hooks() {
|
52 |
+
add_filter( 'pre_set_site_transient_update_themes', array( $this, 'check_theme_update' ) );
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Check for Update for this specific project
|
57 |
+
*/
|
58 |
+
public function check_plugin_update( $transient_data ) {
|
59 |
+
global $pagenow;
|
60 |
+
|
61 |
+
if ( ! is_object( $transient_data ) ) {
|
62 |
+
$transient_data = new \stdClass;
|
63 |
+
}
|
64 |
+
|
65 |
+
if ( 'plugins.php' == $pagenow && is_multisite() ) {
|
66 |
+
return $transient_data;
|
67 |
+
}
|
68 |
+
|
69 |
+
if ( ! empty( $transient_data->response ) && ! empty( $transient_data->response[ $this->client->basename ] ) ) {
|
70 |
+
return $transient_data;
|
71 |
+
}
|
72 |
+
|
73 |
+
$version_info = $this->get_cached_version_info();
|
74 |
+
|
75 |
+
if ( false === $version_info ) {
|
76 |
+
$version_info = $this->get_project_latest_version();
|
77 |
+
$this->set_cached_version_info( $version_info );
|
78 |
+
}
|
79 |
+
|
80 |
+
if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
|
81 |
+
|
82 |
+
if ( version_compare( $this->client->project_version, $version_info->new_version, '<' ) ) {
|
83 |
+
unset( $version_info->sections );
|
84 |
+
$transient_data->response[ $this->client->basename ] = $version_info;
|
85 |
+
}
|
86 |
+
|
87 |
+
$transient_data->last_checked = time();
|
88 |
+
$transient_data->checked[ $this->client->basename ] = $this->client->project_version;
|
89 |
+
}
|
90 |
+
|
91 |
+
return $transient_data;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Get version info from database
|
96 |
+
*
|
97 |
+
* @return Object or Boolean
|
98 |
+
*/
|
99 |
+
private function get_cached_version_info() {
|
100 |
+
|
101 |
+
$value = get_transient( $this->cache_key );
|
102 |
+
|
103 |
+
if( ! $value && ! isset( $value->name ) ) {
|
104 |
+
return false; // Cache is expired
|
105 |
+
}
|
106 |
+
|
107 |
+
// We need to turn the icons into an array
|
108 |
+
if ( isset( $value->icons ) ) {
|
109 |
+
$value->icons = (array) $value->icons;
|
110 |
+
}
|
111 |
+
|
112 |
+
// We need to turn the banners into an array
|
113 |
+
if ( isset( $value->banners ) ) {
|
114 |
+
$value->banners = (array) $value->banners;
|
115 |
+
}
|
116 |
+
|
117 |
+
if ( isset( $value->sections ) ) {
|
118 |
+
$value->sections = (array) $value->sections;
|
119 |
+
}
|
120 |
+
|
121 |
+
return $value;
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Set version info to database
|
126 |
+
*/
|
127 |
+
private function set_cached_version_info( $value ) {
|
128 |
+
if ( ! $value ) {
|
129 |
+
return;
|
130 |
+
}
|
131 |
+
|
132 |
+
set_transient( $this->cache_key, $value, 3 * HOUR_IN_SECONDS );
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Get plugin info from Appsero
|
137 |
+
*/
|
138 |
+
private function get_project_latest_version() {
|
139 |
+
|
140 |
+
$license_option_key = 'appsero_' . md5( $this->client->slug ) . '_manage_license';
|
141 |
+
$license = get_option( $license_option_key, null );
|
142 |
+
|
143 |
+
$params = array(
|
144 |
+
'version' => $this->client->project_version,
|
145 |
+
'name' => $this->client->name,
|
146 |
+
'slug' => $this->client->slug,
|
147 |
+
'basename' => $this->client->basename,
|
148 |
+
'license_key' => ! empty( $license ) && isset( $license['key'] ) ? $license['key'] : '',
|
149 |
+
);
|
150 |
+
|
151 |
+
$route = 'update/' . $this->client->hash . '/check';
|
152 |
+
|
153 |
+
$response = $this->client->send_request( $params, $route, true );
|
154 |
+
|
155 |
+
if ( is_wp_error( $response ) ) {
|
156 |
+
return false;
|
157 |
+
}
|
158 |
+
|
159 |
+
$response = json_decode( wp_remote_retrieve_body( $response ) );
|
160 |
+
|
161 |
+
if ( ! isset( $response->slug ) ) {
|
162 |
+
return false;
|
163 |
+
}
|
164 |
+
|
165 |
+
if ( isset( $response->icons ) ) {
|
166 |
+
$response->icons = (array) $response->icons;
|
167 |
+
}
|
168 |
+
|
169 |
+
if ( isset( $response->banners ) ) {
|
170 |
+
$response->banners = (array) $response->banners;
|
171 |
+
}
|
172 |
+
|
173 |
+
if ( isset( $response->sections ) ) {
|
174 |
+
$response->sections = (array) $response->sections;
|
175 |
+
}
|
176 |
+
|
177 |
+
return $response;
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Updates information on the "View version x.x details" page with custom data.
|
182 |
+
*
|
183 |
+
* @param mixed $data
|
184 |
+
* @param string $action
|
185 |
+
* @param object $args
|
186 |
+
*
|
187 |
+
* @return object $data
|
188 |
+
*/
|
189 |
+
public function plugins_api_filter( $data, $action = '', $args = null ) {
|
190 |
+
|
191 |
+
if ( $action != 'plugin_information' ) {
|
192 |
+
return $data;
|
193 |
+
}
|
194 |
+
|
195 |
+
if ( ! isset( $args->slug ) || ( $args->slug != $this->client->slug ) ) {
|
196 |
+
return $data;
|
197 |
+
}
|
198 |
+
|
199 |
+
$version_info = $this->get_cached_version_info();
|
200 |
+
|
201 |
+
if ( false === $version_info ) {
|
202 |
+
$version_info = $this->get_project_latest_version();
|
203 |
+
$this->set_cached_version_info( $version_info );
|
204 |
+
}
|
205 |
+
|
206 |
+
return $version_info;
|
207 |
+
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* Check theme upate
|
211 |
+
*/
|
212 |
+
public function check_theme_update( $transient_data ) {
|
213 |
+
global $pagenow;
|
214 |
+
|
215 |
+
if ( ! is_object( $transient_data ) ) {
|
216 |
+
$transient_data = new \stdClass;
|
217 |
+
}
|
218 |
+
|
219 |
+
if ( 'themes.php' == $pagenow && is_multisite() ) {
|
220 |
+
return $transient_data;
|
221 |
+
}
|
222 |
+
|
223 |
+
if ( ! empty( $transient_data->response ) && ! empty( $transient_data->response[ $this->client->slug ] ) ) {
|
224 |
+
return $transient_data;
|
225 |
+
}
|
226 |
+
|
227 |
+
$version_info = $this->get_cached_version_info();
|
228 |
+
|
229 |
+
if ( false === $version_info ) {
|
230 |
+
$version_info = $this->get_project_latest_version();
|
231 |
+
$this->set_cached_version_info( $version_info );
|
232 |
+
}
|
233 |
+
|
234 |
+
if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
|
235 |
+
|
236 |
+
if ( version_compare( $this->client->project_version, $version_info->new_version, '<' ) ) {
|
237 |
+
$transient_data->response[ $this->client->slug ] = (array) $version_info;
|
238 |
+
}
|
239 |
+
|
240 |
+
$transient_data->last_checked = time();
|
241 |
+
$transient_data->checked[ $this->client->slug ] = $this->client->project_version;
|
242 |
+
}
|
243 |
+
|
244 |
+
return $transient_data;
|
245 |
+
}
|
246 |
+
|
247 |
+
}
|
ReadMe.txt → readme.txt
RENAMED
@@ -1,10 +1,13 @@
|
|
1 |
=== Subscribe2 - Form, Email Subscribers & Newsletters ===
|
2 |
-
Contributors:
|
3 |
-
Donate link: https://
|
4 |
Tags: posts, subscription, email, subscribe, notify, notification, newsletter, post notification, email marketing, optin, form
|
5 |
Requires at least: 4.0
|
6 |
-
Tested up to: 5.
|
|
|
|
|
7 |
License: GPLv3
|
|
|
8 |
|
9 |
Sends a list of subscribers an email notification when you publish new posts.
|
10 |
|
@@ -31,7 +34,11 @@ The format of the email can also be customised for per-post notifications, Subsc
|
|
31 |
* HTML excerpt (Registered Users only).
|
32 |
* HTML full post (Registered Users only).
|
33 |
|
34 |
-
If you want to
|
|
|
|
|
|
|
|
|
35 |
|
36 |
== Installation ==
|
37 |
|
@@ -65,4 +72,9 @@ This token will automatically be replaced by dynamic subscription information an
|
|
65 |
|
66 |
== Changelog ==
|
67 |
|
68 |
-
|
|
|
|
|
|
|
|
|
|
1 |
=== Subscribe2 - Form, Email Subscribers & Newsletters ===
|
2 |
+
Contributors: tareq1988, nizamuddinbabu, wemail
|
3 |
+
Donate link: https://getwemail.io
|
4 |
Tags: posts, subscription, email, subscribe, notify, notification, newsletter, post notification, email marketing, optin, form
|
5 |
Requires at least: 4.0
|
6 |
+
Tested up to: 5.4
|
7 |
+
Stable tag: 10.33
|
8 |
+
Requires PHP: 5.4
|
9 |
License: GPLv3
|
10 |
+
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
11 |
|
12 |
Sends a list of subscribers an email notification when you publish new posts.
|
13 |
|
34 |
* HTML excerpt (Registered Users only).
|
35 |
* HTML full post (Registered Users only).
|
36 |
|
37 |
+
If you want to grow your subscriber lists, send automated campaigns to huge subscriber lists, you should upgrade to [weMail](https://getwemail.io).
|
38 |
+
|
39 |
+
|
40 |
+
= Privacy Policy =
|
41 |
+
Subscribe2 uses [Appsero](https://appsero.com) SDK to collect some telemetry data upon user's confirmation. This helps us to troubleshoot problems faster & make product improvements. Learn more about how [Appsero collects and uses this data](https://appsero.com/privacy-policy/).
|
42 |
|
43 |
== Installation ==
|
44 |
|
72 |
|
73 |
== Changelog ==
|
74 |
|
75 |
+
= 10.33 (4th June, 2020) =
|
76 |
+
|
77 |
+
* Bump tested upto version 4.4
|
78 |
+
* Minimum PHP version set to 5.4
|
79 |
+
|
80 |
+
See complete [changelog](https://github.com/weMail/Subscribe2/blob/develop/changeLog.txt).
|
subscribe2.php
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Subscribe2
|
4 |
-
Plugin URI: https://
|
5 |
Description: Notifies an email list when new entries are posted.
|
6 |
-
Version: 10.
|
7 |
-
Author:
|
8 |
-
Author URI: https://
|
9 |
Licence: GPLv3
|
10 |
Text Domain: subscribe2
|
11 |
*/
|
12 |
|
13 |
/*
|
14 |
-
Copyright (C)
|
15 |
Based on the Original Subscribe2 plugin by
|
16 |
Copyright (C) 2005 Scott Merrill (skippy@skippy.net)
|
17 |
|
@@ -54,7 +54,7 @@ if ( is_plugin_active_for_network( plugin_basename( __FILE__ ) ) ) {
|
|
54 |
|
55 |
// our version number. Don't touch this or any line below
|
56 |
// unless you know exactly what you are doing
|
57 |
-
define( 'S2VERSION', '10.
|
58 |
define( 'S2PLUGIN', __FILE__ );
|
59 |
define( 'S2PATH', trailingslashit( dirname( __FILE__ ) ) );
|
60 |
define( 'S2DIR', trailingslashit( dirname( plugin_basename( __FILE__ ) ) ) );
|
@@ -66,7 +66,9 @@ if ( function_exists( 'set_time_limit' ) ) {
|
|
66 |
}
|
67 |
|
68 |
global $mysubscribe2;
|
|
|
69 |
require_once S2PATH . 'classes/class-s2-core.php';
|
|
|
70 |
if ( is_admin() ) {
|
71 |
require_once S2PATH . 'classes/class-s2-admin.php';
|
72 |
$mysubscribe2 = new S2_Admin();
|
@@ -74,4 +76,22 @@ if ( is_admin() ) {
|
|
74 |
require_once S2PATH . 'classes/class-s2-frontend.php';
|
75 |
$mysubscribe2 = new S2_Frontend();
|
76 |
}
|
|
|
77 |
add_action( 'plugins_loaded', array( $mysubscribe2, 's2init' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Subscribe2
|
4 |
+
Plugin URI: https://getwemail.io
|
5 |
Description: Notifies an email list when new entries are posted.
|
6 |
+
Version: 10.33
|
7 |
+
Author: weMail
|
8 |
+
Author URI: https://getwemail.io
|
9 |
Licence: GPLv3
|
10 |
Text Domain: subscribe2
|
11 |
*/
|
12 |
|
13 |
/*
|
14 |
+
Copyright (C) 2020 weDevs (info@getwemail.io)
|
15 |
Based on the Original Subscribe2 plugin by
|
16 |
Copyright (C) 2005 Scott Merrill (skippy@skippy.net)
|
17 |
|
54 |
|
55 |
// our version number. Don't touch this or any line below
|
56 |
// unless you know exactly what you are doing
|
57 |
+
define( 'S2VERSION', '10.33' );
|
58 |
define( 'S2PLUGIN', __FILE__ );
|
59 |
define( 'S2PATH', trailingslashit( dirname( __FILE__ ) ) );
|
60 |
define( 'S2DIR', trailingslashit( dirname( plugin_basename( __FILE__ ) ) ) );
|
66 |
}
|
67 |
|
68 |
global $mysubscribe2;
|
69 |
+
|
70 |
require_once S2PATH . 'classes/class-s2-core.php';
|
71 |
+
|
72 |
if ( is_admin() ) {
|
73 |
require_once S2PATH . 'classes/class-s2-admin.php';
|
74 |
$mysubscribe2 = new S2_Admin();
|
76 |
require_once S2PATH . 'classes/class-s2-frontend.php';
|
77 |
$mysubscribe2 = new S2_Frontend();
|
78 |
}
|
79 |
+
|
80 |
add_action( 'plugins_loaded', array( $mysubscribe2, 's2init' ) );
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Initialize the plugin tracker
|
84 |
+
*
|
85 |
+
* @return void
|
86 |
+
*/
|
87 |
+
function subscribe2_init_appsero() {
|
88 |
+
|
89 |
+
if ( ! class_exists( 'Appsero\Client' ) ) {
|
90 |
+
require_once S2PATH . 'include/appsero/src/Client.php';
|
91 |
+
}
|
92 |
+
|
93 |
+
$client = new Appsero\Client( '6c1e710d-aab6-4d4b-b29d-aad2ff773f4c', 'Subscribe2', __FILE__ );
|
94 |
+
$client->insights()->init();
|
95 |
+
}
|
96 |
+
|
97 |
+
subscribe2_init_appsero();
|
subscribe2.pot
CHANGED
@@ -1,30 +1,41 @@
|
|
1 |
-
# Copyright (C) 2020
|
2 |
-
# This file is distributed under the same license as the Subscribe2
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Subscribe2 10.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/subscribe2\n"
|
7 |
-
"POT-Creation-Date: 2020-01-19 17:21:19+00:00\n"
|
8 |
-
"MIME-Version: 1.0\n"
|
9 |
-
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
-
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"PO-Revision-Date: 2020-MO-DA HO:MI+ZONE\n"
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
-
"
|
15 |
-
"
|
16 |
-
"
|
17 |
-
"
|
18 |
-
"
|
19 |
-
"
|
20 |
-
"
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
#: admin/your-subscriptions.php:13
|
29 |
msgid "Security error! Your request cannot be completed."
|
30 |
msgstr ""
|
@@ -90,9 +101,7 @@ msgid "Attempt made to resend the Digest Notification email"
|
|
90 |
msgstr ""
|
91 |
|
92 |
#: admin/settings.php:37
|
93 |
-
msgid ""
|
94 |
-
"The Digest Notification email contained no post information. No email was "
|
95 |
-
"sent"
|
96 |
msgstr ""
|
97 |
|
98 |
#: admin/settings.php:120
|
@@ -112,53 +121,58 @@ msgid "Modify your template"
|
|
112 |
msgstr ""
|
113 |
|
114 |
#: admin/settings.php:152
|
115 |
-
msgid ""
|
116 |
-
"Your chosen email type (per-post or digest) does not support the following "
|
117 |
-
"keywords:"
|
118 |
msgstr ""
|
119 |
|
120 |
-
#: admin/settings.php:166
|
121 |
#. Translators: Warning message
|
122 |
-
|
123 |
-
"You appear to be sending notifications from %1$s, which has a different "
|
124 |
-
"domain name than your blog server %2$s. This may result in failed emails."
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: admin/settings.php:174
|
128 |
-
#: classes/class-s2-admin.php:
|
|
|
129 |
msgid "Settings"
|
130 |
msgstr ""
|
131 |
|
132 |
-
#: admin/settings.php:176
|
|
|
133 |
msgid "Email Settings"
|
134 |
msgstr ""
|
135 |
|
136 |
-
#: admin/settings.php:177
|
|
|
137 |
msgid "Templates"
|
138 |
msgstr ""
|
139 |
|
140 |
-
#: admin/settings.php:178
|
|
|
141 |
msgid "Registered Users"
|
142 |
msgstr ""
|
143 |
|
144 |
-
#: admin/settings.php:179
|
|
|
145 |
msgid "Appearance"
|
146 |
msgstr ""
|
147 |
|
148 |
-
#: admin/settings.php:180
|
|
|
149 |
msgid "Miscellaneous"
|
150 |
msgstr ""
|
151 |
|
152 |
-
#: admin/settings.php:203
|
153 |
-
#: classes/class-s2-
|
|
|
154 |
msgid "Edit"
|
155 |
msgstr ""
|
156 |
|
157 |
-
#: admin/settings.php:206
|
|
|
158 |
msgid "Update"
|
159 |
msgstr ""
|
160 |
|
161 |
-
#: admin/settings.php:207
|
|
|
162 |
msgid "Revert"
|
163 |
msgstr ""
|
164 |
|
@@ -186,20 +200,39 @@ msgstr ""
|
|
186 |
msgid "Include theme CSS stylesheet in HTML notifications"
|
187 |
msgstr ""
|
188 |
|
189 |
-
#: admin/settings.php:221
|
190 |
-
#: admin/settings.php:
|
191 |
-
#: admin/settings.php:
|
192 |
-
#: admin/settings.php:
|
193 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
msgid "Yes"
|
195 |
msgstr ""
|
196 |
|
197 |
-
#: admin/settings.php:223
|
198 |
-
#: admin/settings.php:
|
199 |
-
#: admin/settings.php:
|
200 |
-
#: admin/settings.php:
|
201 |
-
#: admin/settings.php:
|
202 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
msgid "No"
|
204 |
msgstr ""
|
205 |
|
@@ -207,525 +240,503 @@ msgstr ""
|
|
207 |
msgid "Send Emails for Pages"
|
208 |
msgstr ""
|
209 |
|
210 |
-
#: admin/settings.php:
|
|
|
|
|
|
|
|
|
211 |
msgid "Send Emails for Password Protected Posts"
|
212 |
msgstr ""
|
213 |
|
214 |
-
#: admin/settings.php:
|
215 |
msgid "Send Emails for Private Posts"
|
216 |
msgstr ""
|
217 |
|
218 |
-
#: admin/settings.php:
|
219 |
msgid "Include Sticky Posts at the top of all Digest Notifications"
|
220 |
msgstr ""
|
221 |
|
222 |
-
#: admin/settings.php:
|
223 |
msgid "Send Email From"
|
224 |
msgstr ""
|
225 |
|
226 |
-
#: admin/settings.php:
|
227 |
msgid "Send Emails"
|
228 |
msgstr ""
|
229 |
|
230 |
-
#: admin/settings.php:
|
231 |
msgid "For digest notifications, date order for posts is"
|
232 |
msgstr ""
|
233 |
|
234 |
-
#: admin/settings.php:
|
235 |
msgid "Descending"
|
236 |
msgstr ""
|
237 |
|
238 |
-
#: admin/settings.php:
|
239 |
msgid "Ascending"
|
240 |
msgstr ""
|
241 |
|
242 |
-
#: admin/settings.php:
|
243 |
msgid "Add Tracking Parameters to the Permalink"
|
244 |
msgstr ""
|
245 |
|
246 |
-
#: admin/settings.php:
|
247 |
-
msgid ""
|
248 |
-
"eg. "
|
249 |
-
"utm_source=subscribe2&utm_medium=email&utm_campaign=postnotify&"
|
250 |
-
"amp;utm_id={ID}&utm_title={TITLE}"
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: admin/settings.php:
|
254 |
msgid "Notification email (must not be empty)"
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: admin/settings.php:
|
|
|
|
|
258 |
msgid "Subject Line"
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: admin/settings.php:
|
262 |
msgid "Send Email Preview"
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: admin/settings.php:
|
266 |
msgid "Message substitutions"
|
267 |
msgstr ""
|
268 |
|
269 |
-
#: admin/settings.php:
|
270 |
msgid "IF THE FOLLOWING KEYWORDS ARE ALSO IN YOUR POST THEY WILL BE SUBSTITUTED"
|
271 |
msgstr ""
|
272 |
|
273 |
-
#: admin/settings.php:
|
274 |
msgid "the post's title<br>(<i>for per-post emails only</i>)"
|
275 |
msgstr ""
|
276 |
|
277 |
-
#: admin/settings.php:
|
278 |
msgid "the post's unformatted title <br>(<i>for per-post emails only</i>)"
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: admin/settings.php:
|
282 |
-
msgid ""
|
283 |
-
"the excerpt or the entire post<br>(<i>based on the subscriber's "
|
284 |
-
"preferences</i>)"
|
285 |
msgstr ""
|
286 |
|
287 |
-
#: admin/settings.php:
|
288 |
-
msgid ""
|
289 |
-
"the excerpt of the post and the time it was posted<br>(<i>for digest emails "
|
290 |
-
"only</i>)"
|
291 |
msgstr ""
|
292 |
|
293 |
-
#: admin/settings.php:
|
294 |
msgid "a list of post titles<br>(<i>for digest emails only</i>)"
|
295 |
msgstr ""
|
296 |
|
297 |
-
#: admin/settings.php:
|
298 |
-
msgid ""
|
299 |
-
"a list of post titles followed by links to the articles<br>(<i>for digest "
|
300 |
-
"emails only</i>)"
|
301 |
msgstr ""
|
302 |
|
303 |
-
#: admin/settings.php:
|
304 |
-
msgid ""
|
305 |
-
"a reference style list of links at the end of the email with corresponding "
|
306 |
-
"numbers in the content<br>(<i>for the full content plain text per-post "
|
307 |
-
"email only</i>)"
|
308 |
msgstr ""
|
309 |
|
310 |
-
#: admin/settings.php:
|
311 |
msgid "the post's permalink<br>(<i>for per-post emails only</i>)"
|
312 |
msgstr ""
|
313 |
|
314 |
-
#: admin/settings.php:
|
315 |
msgid "the post's permalink after conversion by TinyURL"
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: admin/settings.php:
|
319 |
msgid "the post's unformatted permalink<br>(<i>for per-post emails only</i>)"
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: admin/settings.php:
|
323 |
msgid "the date the post was made<br>(<i>for per-post emails only</i>)"
|
324 |
msgstr ""
|
325 |
|
326 |
-
#: admin/settings.php:
|
327 |
msgid "the time the post was made<br>(<i>for per-post emails only</i>)"
|
328 |
msgstr ""
|
329 |
|
330 |
-
#: admin/settings.php:
|
331 |
msgid "the admin or post author's name"
|
332 |
msgstr ""
|
333 |
|
334 |
-
#: admin/settings.php:
|
335 |
msgid "the admin or post author's email"
|
336 |
msgstr ""
|
337 |
|
338 |
-
#: admin/settings.php:
|
339 |
msgid "the post author's name"
|
340 |
msgstr ""
|
341 |
|
342 |
-
#: admin/settings.php:
|
343 |
-
msgid ""
|
344 |
-
"the generated link to confirm a request<br>(<i>only used in the "
|
345 |
-
"confirmation email template</i>)"
|
346 |
msgstr ""
|
347 |
|
348 |
-
#: admin/settings.php:
|
349 |
-
msgid ""
|
350 |
-
"a generated unsubscribe link<br>(<i>only used in the email notification "
|
351 |
-
"template</i>)"
|
352 |
msgstr ""
|
353 |
|
354 |
-
#: admin/settings.php:
|
355 |
-
msgid ""
|
356 |
-
"Action performed by LINK in confirmation email<br>(<i>only used in the "
|
357 |
-
"confirmation email template</i>)"
|
358 |
msgstr ""
|
359 |
|
360 |
-
#: admin/settings.php:
|
361 |
msgid "the post's assigned categories"
|
362 |
msgstr ""
|
363 |
|
364 |
-
#: admin/settings.php:
|
365 |
msgid "the post's assigned Tags"
|
366 |
msgstr ""
|
367 |
|
368 |
-
#: admin/settings.php:
|
369 |
-
msgid ""
|
370 |
-
"the number of posts included in the digest email<br>(<i>for digest emails "
|
371 |
-
"only</i>)"
|
372 |
msgstr ""
|
373 |
|
374 |
-
#: admin/settings.php:
|
375 |
msgid "the post's featured image"
|
376 |
msgstr ""
|
377 |
|
378 |
-
#: admin/settings.php:
|
379 |
msgid "Subscribe / Unsubscribe confirmation email"
|
380 |
msgstr ""
|
381 |
|
382 |
-
#: admin/settings.php:
|
383 |
msgid "Reminder email to Unconfirmed Subscribers"
|
384 |
msgstr ""
|
385 |
|
386 |
-
#: admin/settings.php:
|
387 |
msgid "Compulsory Categories"
|
388 |
msgstr ""
|
389 |
|
390 |
-
#: admin/settings.php:
|
391 |
msgid "Compulsory categories will be checked by default for Registered Subscribers"
|
392 |
msgstr ""
|
393 |
|
394 |
-
#: admin/settings.php:
|
395 |
msgid "Excluded Categories"
|
396 |
msgstr ""
|
397 |
|
398 |
-
#: admin/settings.php:
|
399 |
-
msgid ""
|
400 |
-
"Posts assigned to any Excluded Category do not generate notifications and "
|
401 |
-
"are not included in digest notifications"
|
402 |
msgstr ""
|
403 |
|
404 |
-
#: admin/settings.php:
|
405 |
msgid "Allow registered users to subscribe to excluded categories?"
|
406 |
msgstr ""
|
407 |
|
408 |
-
#: admin/settings.php:
|
409 |
msgid "Excluded Formats"
|
410 |
msgstr ""
|
411 |
|
412 |
-
#: admin/settings.php:
|
413 |
-
msgid ""
|
414 |
-
"Posts assigned to any Excluded Format do not generate notifications and are "
|
415 |
-
"not included in digest notifications"
|
416 |
msgstr ""
|
417 |
|
418 |
-
#: admin/settings.php:
|
419 |
msgid "Auto-Subscribe"
|
420 |
msgstr ""
|
421 |
|
422 |
-
#: admin/settings.php:
|
423 |
msgid "Subscribe new users registering with your blog"
|
424 |
msgstr ""
|
425 |
|
426 |
-
#: admin/settings.php:
|
427 |
msgid "Automatically"
|
428 |
msgstr ""
|
429 |
|
430 |
-
#: admin/settings.php:
|
431 |
msgid "Display option on Registration Form"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: admin/settings.php:
|
435 |
msgid "Auto-subscribe includes any excluded categories"
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: admin/settings.php:
|
439 |
msgid "Registration Form option is checked by default"
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: admin/settings.php:
|
443 |
msgid "Auto-subscribe users to receive email as"
|
444 |
msgstr ""
|
445 |
|
446 |
-
#: admin/settings.php:
|
|
|
447 |
#: classes/class-s2-forms.php:48
|
448 |
msgid "HTML - Full"
|
449 |
msgstr ""
|
450 |
|
451 |
-
#: admin/settings.php:
|
|
|
452 |
#: classes/class-s2-forms.php:50
|
453 |
msgid "HTML - Excerpt"
|
454 |
msgstr ""
|
455 |
|
456 |
-
#: admin/settings.php:
|
|
|
457 |
#: classes/class-s2-forms.php:52
|
458 |
msgid "Plain Text - Full"
|
459 |
msgstr ""
|
460 |
|
461 |
-
#: admin/settings.php:
|
|
|
462 |
#: classes/class-s2-forms.php:54
|
463 |
msgid "Plain Text - Excerpt"
|
464 |
msgstr ""
|
465 |
|
466 |
-
#: admin/settings.php:
|
467 |
msgid "Registered Users have the option to auto-subscribe to new categories"
|
468 |
msgstr ""
|
469 |
|
470 |
-
#: admin/settings.php:
|
471 |
msgid "New categories are immediately excluded"
|
472 |
msgstr ""
|
473 |
|
474 |
-
#: admin/settings.php:
|
475 |
-
msgid ""
|
476 |
-
"Option for Registered Users to auto-subscribe to new categories is checked "
|
477 |
-
"by default"
|
478 |
msgstr ""
|
479 |
|
480 |
-
#: admin/settings.php:
|
481 |
msgid "Display checkbox to allow subscriptions from the comment form"
|
482 |
msgstr ""
|
483 |
|
484 |
-
#: admin/settings.php:
|
485 |
msgid "Before the Comment Submit button"
|
486 |
msgstr ""
|
487 |
|
488 |
-
#: admin/settings.php:
|
489 |
msgid "After the Comment Submit button"
|
490 |
msgstr ""
|
491 |
|
492 |
-
#: admin/settings.php:
|
493 |
msgid "Comment form checkbox is checked by default"
|
494 |
msgstr ""
|
495 |
|
496 |
-
#: admin/settings.php:
|
497 |
msgid "Show one-click subscription on profile page"
|
498 |
msgstr ""
|
499 |
|
500 |
-
#: admin/settings.php:
|
501 |
msgid "Set default Subscribe2 page as"
|
502 |
msgstr ""
|
503 |
|
504 |
-
#: admin/settings.php:
|
505 |
msgid "Show a link to your subscription page in \"meta\"?"
|
506 |
msgstr ""
|
507 |
|
508 |
-
#: admin/settings.php:
|
509 |
msgid "Show the Subscribe2 button on the Write toolbar?"
|
510 |
msgstr ""
|
511 |
|
512 |
-
#: admin/settings.php:
|
513 |
msgid "Enable popup style subscription form?"
|
514 |
msgstr ""
|
515 |
|
516 |
-
#: admin/settings.php:
|
517 |
msgid "Enable Subscribe2 Widget?"
|
518 |
msgstr ""
|
519 |
|
520 |
-
#: admin/settings.php:
|
521 |
msgid "Enable Subscribe2 Counter Widget?"
|
522 |
msgstr ""
|
523 |
|
524 |
-
#: admin/settings.php:
|
525 |
msgid "Disable email notifications is checked by default on authoring pages?"
|
526 |
msgstr ""
|
527 |
|
528 |
-
#: admin/settings.php:
|
529 |
-
msgid ""
|
530 |
-
"Use javascript to update IP address in Subscribe2 HTML form data? (useful "
|
531 |
-
"if caching is enabled)"
|
532 |
msgstr ""
|
533 |
|
534 |
-
#: admin/settings.php:
|
535 |
msgid "Barred Domains"
|
536 |
msgstr ""
|
537 |
|
538 |
-
#: admin/settings.php:
|
539 |
-
msgid ""
|
540 |
-
"Enter domains to bar for public subscriptions, wildcards (*) and exceptions "
|
541 |
-
"(!) are allowed"
|
542 |
msgstr ""
|
543 |
|
544 |
-
#: admin/settings.php:
|
545 |
-
msgid ""
|
546 |
-
"Use a new line for each entry and omit the \"@\" symbol, for example "
|
547 |
-
"!email.com, hotmail.com, yahoo.*"
|
548 |
msgstr ""
|
549 |
|
550 |
-
#: admin/settings.php:
|
551 |
msgid "Links"
|
552 |
msgstr ""
|
553 |
|
554 |
-
#: admin/settings.php:
|
555 |
msgid "Plugin Site"
|
556 |
msgstr ""
|
557 |
|
558 |
-
#: admin/settings.php:
|
559 |
msgid "Plugin Forum"
|
560 |
msgstr ""
|
561 |
|
562 |
-
#: admin/settings.php:
|
563 |
msgid "Plugin Blog"
|
564 |
msgstr ""
|
565 |
|
566 |
-
#: admin/settings.php:
|
567 |
-
msgid "Make a donation via PayPal"
|
568 |
-
msgstr ""
|
569 |
-
|
570 |
-
#: admin/settings.php:500
|
571 |
msgid "Submit"
|
572 |
msgstr ""
|
573 |
|
574 |
-
#: admin/settings.php:
|
575 |
msgid "Reset to Default Settings"
|
576 |
msgstr ""
|
577 |
|
578 |
-
#: admin/settings.php:
|
579 |
-
msgid ""
|
580 |
-
"Use this to reset all options to their defaults. This <strong><em>will "
|
581 |
-
"not</em></strong> modify your list of subscribers."
|
582 |
msgstr ""
|
583 |
|
584 |
-
#: admin/settings.php:
|
585 |
msgid "RESET"
|
586 |
msgstr ""
|
587 |
|
588 |
-
#: admin/subscribers.php:
|
589 |
msgid "Address(es) subscribed!"
|
590 |
msgstr ""
|
591 |
|
592 |
-
#: admin/subscribers.php:
|
593 |
msgid "Address(es) unsubscribed!"
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: admin/subscribers.php:
|
597 |
-
msgid ""
|
598 |
-
"Some emails were not processed, the following are already Registered "
|
599 |
-
"Subscribers"
|
600 |
msgstr ""
|
601 |
|
602 |
-
#: admin/subscribers.php:
|
603 |
msgid "Some emails were not processed, the following are already Public Subscribers"
|
604 |
msgstr ""
|
605 |
|
606 |
-
#: admin/subscribers.php:
|
607 |
msgid "Some emails were not processed, the following were not in the database"
|
608 |
msgstr ""
|
609 |
|
610 |
-
#: admin/subscribers.php:
|
611 |
msgid "Some emails were not processed, the following were invalid email addresses"
|
612 |
msgstr ""
|
613 |
|
614 |
-
#: admin/subscribers.php:
|
615 |
msgid "Reminder Email(s) Sent!"
|
616 |
msgstr ""
|
617 |
|
618 |
-
#: admin/subscribers.php:
|
619 |
msgid "Registered Users Subscribed!"
|
620 |
msgstr ""
|
621 |
|
622 |
-
#: admin/subscribers.php:
|
623 |
msgid "Registered Users Unsubscribed!"
|
624 |
msgstr ""
|
625 |
|
626 |
-
#: admin/subscribers.php:
|
627 |
msgid "Format updated for Selected Registered Users!"
|
628 |
msgstr ""
|
629 |
|
630 |
-
#: admin/subscribers.php:
|
631 |
msgid "Digest Subscription updated for Selected Registered Users!"
|
632 |
msgstr ""
|
633 |
|
634 |
-
#: admin/subscribers.php:
|
|
|
635 |
msgid "Subscribers"
|
636 |
msgstr ""
|
637 |
|
638 |
-
#: admin/subscribers.php:
|
639 |
-
#: classes/class-s2-admin.php:
|
|
|
640 |
msgid "Public Subscribers"
|
641 |
msgstr ""
|
642 |
|
643 |
-
#: admin/subscribers.php:
|
644 |
-
#: classes/class-s2-admin.php:
|
|
|
645 |
msgid "Registered Subscribers"
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: admin/subscribers.php:
|
|
|
649 |
msgid "Add/Remove Subscribers"
|
650 |
msgstr ""
|
651 |
|
652 |
-
#: admin/subscribers.php:
|
653 |
msgid "Enter addresses, one per line or comma-separated"
|
654 |
msgstr ""
|
655 |
|
656 |
-
#: admin/subscribers.php:
|
657 |
-
#:
|
|
|
|
|
658 |
msgid "Subscribe"
|
659 |
msgstr ""
|
660 |
|
661 |
-
#: admin/subscribers.php:
|
662 |
-
#:
|
|
|
|
|
663 |
msgid "Unsubscribe"
|
664 |
msgstr ""
|
665 |
|
666 |
-
#: admin/subscribers.php:
|
|
|
667 |
msgid "Current Subscribers"
|
668 |
msgstr ""
|
669 |
|
670 |
-
#: admin/subscribers.php:
|
671 |
msgid "Add Registered User"
|
672 |
msgstr ""
|
673 |
|
674 |
-
#: admin/subscribers.php:
|
675 |
msgid "Filter"
|
676 |
msgstr ""
|
677 |
|
678 |
-
#: admin/subscribers.php:
|
679 |
msgid "Send Reminder Email"
|
680 |
msgstr ""
|
681 |
|
682 |
-
#: admin/subscribers.php:
|
683 |
msgid "Save Emails to CSV File"
|
684 |
msgstr ""
|
685 |
|
686 |
-
#: admin/subscribers.php:
|
687 |
msgid "Search"
|
688 |
msgstr ""
|
689 |
|
690 |
-
#: admin/subscribers.php:
|
691 |
msgid "Bulk Management"
|
692 |
msgstr ""
|
693 |
|
694 |
-
#: admin/subscribers.php:
|
695 |
-
|
696 |
-
"Preferences for Registered Users selected above can be changed using this "
|
697 |
-
"section."
|
698 |
msgstr ""
|
699 |
|
700 |
-
#: admin/subscribers.php:
|
701 |
msgid "Consider User Privacy as changes cannot be undone"
|
702 |
msgstr ""
|
703 |
|
704 |
-
#: admin/subscribers.php:
|
705 |
msgid "Action to perform"
|
706 |
msgstr ""
|
707 |
|
708 |
-
#: admin/subscribers.php:
|
709 |
msgid "Bulk Update Categories"
|
710 |
msgstr ""
|
711 |
|
712 |
-
#: admin/subscribers.php:
|
713 |
msgid "Send email as"
|
714 |
msgstr ""
|
715 |
|
716 |
-
#: admin/subscribers.php:
|
717 |
msgid "Bulk Update Format"
|
718 |
msgstr ""
|
719 |
|
720 |
-
#: admin/subscribers.php:
|
721 |
msgid "Consider User Privacy as changes cannot be undone."
|
722 |
msgstr ""
|
723 |
|
724 |
-
#: admin/subscribers.php:
|
725 |
msgid "Subscribe Selected Users to receive a periodic digest notification"
|
726 |
msgstr ""
|
727 |
|
728 |
-
#: admin/subscribers.php:
|
729 |
msgid "Bulk Update Digest Subscription"
|
730 |
msgstr ""
|
731 |
|
@@ -741,30 +752,23 @@ msgstr ""
|
|
741 |
msgid "Update Preferences"
|
742 |
msgstr ""
|
743 |
|
744 |
-
#: classes/class-mo-admin-notice.php:62
|
745 |
#. Translators: Mail Optin admin notice
|
746 |
-
|
747 |
-
"Free
|
748 |
-
"subscribers%2$s and keep them engaged with %1$sautomated and schedule "
|
749 |
-
"newsletters%2$s."
|
750 |
msgstr ""
|
751 |
|
752 |
-
#: classes/class-mo-admin-notice.php:
|
753 |
-
msgid "Install
|
754 |
msgstr ""
|
755 |
|
756 |
-
#: classes/class-mo-admin-notice.php:
|
757 |
-
msgid "Activate
|
758 |
msgstr ""
|
759 |
|
760 |
-
#: classes/class-mo-admin-notice.php:
|
761 |
msgid "Dismiss this notice"
|
762 |
msgstr ""
|
763 |
|
764 |
-
#. Author of the plugin/theme
|
765 |
-
msgid "Subscribe2"
|
766 |
-
msgstr ""
|
767 |
-
|
768 |
#: classes/class-s2-admin.php:10
|
769 |
msgid "Your Subscriptions"
|
770 |
msgstr ""
|
@@ -773,24 +777,20 @@ msgstr ""
|
|
773 |
msgid "Send Email"
|
774 |
msgstr ""
|
775 |
|
776 |
-
#: classes/class-s2-admin.php:42
|
777 |
-
#: classes/class-s2-admin.php:
|
778 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
779 |
msgid "Overview"
|
780 |
msgstr ""
|
781 |
|
782 |
#: classes/class-s2-admin.php:43
|
783 |
-
msgid ""
|
784 |
-
"From this page you can opt in or out of receiving a periodical digest style "
|
785 |
-
"email of blog posts."
|
786 |
msgstr ""
|
787 |
|
788 |
#: classes/class-s2-admin.php:51
|
789 |
-
msgid ""
|
790 |
-
"From this page you can control your subscription preferences. Choose the "
|
791 |
-
"email format you wish to receive, which categories you would like to "
|
792 |
-
"receive notification for and depending on the site settings which authors "
|
793 |
-
"you would like to read."
|
794 |
msgstr ""
|
795 |
|
796 |
#: classes/class-s2-admin.php:63
|
@@ -798,37 +798,23 @@ msgid "From this page you can manage your subscribers."
|
|
798 |
msgstr ""
|
799 |
|
800 |
#: classes/class-s2-admin.php:70
|
801 |
-
msgid ""
|
802 |
-
"Public Subscribers are subscribers who have used the plugin form and only "
|
803 |
-
"provided their email address."
|
804 |
msgstr ""
|
805 |
|
806 |
#: classes/class-s2-admin.php:70
|
807 |
-
msgid ""
|
808 |
-
"On this page public subscribers can be viewed, searched, deleted and also "
|
809 |
-
"toggled between Confirmed and Unconfirmed status."
|
810 |
msgstr ""
|
811 |
|
812 |
#: classes/class-s2-admin.php:77
|
813 |
-
msgid ""
|
814 |
-
"Registered Subscribers are subscribers who have registered in WordPress and "
|
815 |
-
"have a username and password."
|
816 |
msgstr ""
|
817 |
|
818 |
#: classes/class-s2-admin.php:78
|
819 |
-
msgid ""
|
820 |
-
"Registered Subscribers have greater personal control over their "
|
821 |
-
"subscription. They can change the format of the email and also select which "
|
822 |
-
"categories and authors they want to receive notifications about."
|
823 |
msgstr ""
|
824 |
|
825 |
#: classes/class-s2-admin.php:79
|
826 |
-
msgid ""
|
827 |
-
"On this page registered subscribers can be viewed and searched. User "
|
828 |
-
"accounts can be deleted from here with any posts created by those users "
|
829 |
-
"being assigned to the currently logged in user. Bulk changes can be applied "
|
830 |
-
"to all user settings changing their subscription email format and "
|
831 |
-
"categories."
|
832 |
msgstr ""
|
833 |
|
834 |
#: classes/class-s2-admin.php:88
|
@@ -840,312 +826,235 @@ msgid "From this page you can adjust the Settings for Subscribe2."
|
|
840 |
msgstr ""
|
841 |
|
842 |
#: classes/class-s2-admin.php:117
|
843 |
-
msgid ""
|
844 |
-
"This section allows you to specify settings that apply to the emails "
|
845 |
-
"generated by the site."
|
846 |
msgstr ""
|
847 |
|
848 |
#: classes/class-s2-admin.php:118
|
849 |
-
msgid ""
|
850 |
-
"Emails can be sent to individual subscribers by setting the number of "
|
851 |
-
"recipients per email to 1. A setting greater than one will group recipients "
|
852 |
-
"together and make use of the BCC emails header. A setting of 0 sends a "
|
853 |
-
"single email with all subscribers in one large BCC group. A setting of 1 "
|
854 |
-
"looks less like spam email to filters but takes longer to process."
|
855 |
msgstr ""
|
856 |
|
857 |
#: classes/class-s2-admin.php:119
|
858 |
-
msgid ""
|
859 |
-
"This section is also where the sender of the email on this page is chosen. "
|
860 |
-
"You can choose Post Author or your Blogname but it is recommended to create "
|
861 |
-
"a user account with an email address that really exists and shares the same "
|
862 |
-
"domain name as your site (the bit after the @ should be the same as your "
|
863 |
-
"sites web address) and then use this account."
|
864 |
msgstr ""
|
865 |
|
866 |
#: classes/class-s2-admin.php:120
|
867 |
-
msgid ""
|
868 |
-
"This page also configures the frequency of emails. This can be at the time "
|
869 |
-
"new posts are made (per post) or periodically with an excerpt of each post "
|
870 |
-
"made (digest). Additionally the post types (pages, private, password "
|
871 |
-
"protected) can also be configured here."
|
872 |
msgstr ""
|
873 |
|
874 |
#: classes/class-s2-admin.php:127
|
875 |
-
msgid ""
|
876 |
-
"This section allows you to customise the content of your notification "
|
877 |
-
"emails."
|
878 |
msgstr ""
|
879 |
|
880 |
#: classes/class-s2-admin.php:128
|
881 |
-
msgid ""
|
882 |
-
"There are special {KEYWORDS} that are used by Subscribe2 to place content "
|
883 |
-
"into the final email. The template also accepts regular text and HTML as "
|
884 |
-
"desired in the final emails."
|
885 |
msgstr ""
|
886 |
|
887 |
#: classes/class-s2-admin.php:129
|
888 |
-
msgid ""
|
889 |
-
"The {KEYWORDS} are listed on the right of the templates, note that some are "
|
890 |
-
"for per post emails only and some are for digest emails only. Make sure the "
|
891 |
-
"correct keywords are used based upon the Email Settings."
|
892 |
msgstr ""
|
893 |
|
894 |
#: classes/class-s2-admin.php:130
|
895 |
-
msgid ""
|
896 |
-
"The Notification Email template is used for sending notifications of new "
|
897 |
-
"posts. The Subscribe / Unsubscribe confirmation template is sent when a new "
|
898 |
-
"subscription or unsubscription request is made. The Reminder template is "
|
899 |
-
"used to send reminder emails; this is done automatically or can be done "
|
900 |
-
"manually."
|
901 |
msgstr ""
|
902 |
|
903 |
#: classes/class-s2-admin.php:137
|
904 |
-
msgid ""
|
905 |
-
"This section allows settings that apply to Registered Subscribers to be "
|
906 |
-
"configured."
|
907 |
msgstr ""
|
908 |
|
909 |
#: classes/class-s2-admin.php:138
|
910 |
-
msgid ""
|
911 |
-
"Categories can be made compulsory so emails are always sent to Public and "
|
912 |
-
"Registered Subscribers for posts in these categories. They can also be "
|
913 |
-
"excluded so that emails are not generated for Subscribers. Registered "
|
914 |
-
"Subscribers can be allowed to bypass category exclusions. Excluded "
|
915 |
-
"categories take precedence over Compulsory categories."
|
916 |
msgstr ""
|
917 |
|
918 |
#: classes/class-s2-admin.php:139
|
919 |
-
msgid ""
|
920 |
-
"A set of default settings for new users can also be specified using the "
|
921 |
-
"Auto Subscribe section. Settings specified here will be applied to any "
|
922 |
-
"newly created user accounts while Subscribe2 is activated."
|
923 |
msgstr ""
|
924 |
|
925 |
#: classes/class-s2-admin.php:146
|
926 |
-
msgid ""
|
927 |
-
"This section allows you to enable several aspect of the plugin such as "
|
928 |
-
"Widgets and editor buttons."
|
929 |
msgstr ""
|
930 |
|
931 |
#: classes/class-s2-admin.php:147
|
932 |
-
msgid ""
|
933 |
-
"AJAX mode can be enabled that is intended to work with the shortcode link "
|
934 |
-
"parameter so that a dialog opens in the centre of the browser rather then "
|
935 |
-
"using the regular form."
|
936 |
msgstr ""
|
937 |
|
938 |
#: classes/class-s2-admin.php:148
|
939 |
-
msgid ""
|
940 |
-
"The email over ride check box can be set to be automatically checked for "
|
941 |
-
"every new post and page from here to, this may be useful if you will only "
|
942 |
-
"want to send very occasional notifications for specific posts. You can then "
|
943 |
-
"uncheck this box just before you publish your content."
|
944 |
-
msgstr ""
|
945 |
-
|
946 |
-
#: classes/class-s2-admin.php:154
|
947 |
-
msgid "ReCaptcha"
|
948 |
msgstr ""
|
949 |
|
950 |
#: classes/class-s2-admin.php:155
|
951 |
-
msgid "This section
|
952 |
-
msgstr ""
|
953 |
-
|
954 |
-
#: classes/class-s2-admin.php:156
|
955 |
-
msgid ""
|
956 |
-
"V2 ReCaptcha takes precedence over Invisible ReCaptcha. To use Invisible "
|
957 |
-
"ReCaptcha, leave the V2 ReCaptcha key fields empty."
|
958 |
-
msgstr ""
|
959 |
-
|
960 |
-
#: classes/class-s2-admin.php:157
|
961 |
-
msgid ""
|
962 |
-
"Both key files needs populating for V2 ReCaptcha or Invisible ReCaptcha, "
|
963 |
-
"failure to complete both fields will result in ReCaptcha not working."
|
964 |
msgstr ""
|
965 |
|
966 |
-
#: classes/class-s2-admin.php:
|
967 |
-
msgid ""
|
968 |
-
"This section contains a place to bar specified domains from becoming Public "
|
969 |
-
"Subscribers and links to help and support pages."
|
970 |
msgstr ""
|
971 |
|
972 |
-
#: classes/class-s2-admin.php:
|
973 |
-
msgid ""
|
974 |
-
"In the paid Subscribe2 HTML version there is also a place here to enter a "
|
975 |
-
"license code so that updates can be accessed automatically."
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: classes/class-s2-admin.php:
|
979 |
-
msgid ""
|
980 |
-
"From this page you can send emails to the recipients in the group selected "
|
981 |
-
"in the drop down."
|
982 |
msgstr ""
|
983 |
|
984 |
-
#: classes/class-s2-admin.php:
|
985 |
-
msgid ""
|
986 |
-
"<strong>Preview</strong> will send a preview of the email to the currently "
|
987 |
-
"logged in user. <strong>Send</strong> will send the email to the recipient "
|
988 |
-
"list."
|
989 |
msgstr ""
|
990 |
|
991 |
-
#: classes/class-s2-admin.php:
|
992 |
-
msgid ""
|
993 |
-
"You are about to delete a registered user account, any posts made by this "
|
994 |
-
"user will be assigned to you. Are you sure?"
|
995 |
-
msgstr ""
|
996 |
-
|
997 |
-
#: classes/class-s2-admin.php:237
|
998 |
-
msgid ""
|
999 |
-
"You are about to delete registered user accounts, any posts made by these "
|
1000 |
-
"users will be assigned to you. Are you sure?"
|
1001 |
-
msgstr ""
|
1002 |
-
|
1003 |
-
#: classes/class-s2-admin.php:238
|
1004 |
msgid "You are about to delete a public subscriber. Are you sure?"
|
1005 |
msgstr ""
|
1006 |
|
1007 |
-
#: classes/class-s2-admin.php:
|
1008 |
msgid "You are about to delete public subscribers. Are you sure?"
|
1009 |
msgstr ""
|
1010 |
|
1011 |
-
#: classes/class-s2-admin.php:
|
1012 |
-
msgid ""
|
1013 |
-
"You are about to make Bulk Management changes to all Registered Users. Are "
|
1014 |
-
"you sure?"
|
1015 |
msgstr ""
|
1016 |
|
1017 |
-
#: classes/class-s2-admin.php:
|
1018 |
-
msgid ""
|
1019 |
-
"You are about to make Bulk Management changes to the selected Registered "
|
1020 |
-
"User. Are you sure?"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
-
#: classes/class-s2-admin.php:
|
1024 |
-
msgid ""
|
1025 |
-
"You are about to make Bulk Management changes to the selected Registered "
|
1026 |
-
"Users. Are you sure?"
|
1027 |
msgstr ""
|
1028 |
|
1029 |
-
#: classes/class-s2-admin.php:
|
1030 |
-
msgid "Donate"
|
1031 |
-
msgstr ""
|
1032 |
-
|
1033 |
-
#: classes/class-s2-admin.php:370
|
1034 |
msgid "Subscribe2 Notification Override"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
1038 |
msgid "Subscribe2 Preview"
|
1039 |
msgstr ""
|
1040 |
|
1041 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
1042 |
msgid "Subscribe2 Resend"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
1046 |
msgid "Check here to disable sending of an email notification for this post/page"
|
1047 |
msgstr ""
|
1048 |
|
1049 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
1050 |
msgid "Send preview email of this post to currently logged in user:"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
1054 |
msgid "Send Preview"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
1058 |
msgid "Resend the notification email of this post to current subscribers:"
|
1059 |
msgstr ""
|
1060 |
|
1061 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
1062 |
msgid "Resend Notification"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
-
#: classes/class-s2-admin.php:
|
|
|
|
|
|
|
|
|
|
|
1066 |
msgid "Registered User"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
-
#: classes/class-s2-admin.php:
|
1070 |
msgid "Confirmed Public Subscriber"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
-
#: classes/class-s2-admin.php:
|
1074 |
msgid "Unconfirmed Public Subscriber"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
-
#: classes/class-s2-admin.php:
|
|
|
1078 |
#: classes/class-s2-forms.php:366
|
1079 |
msgid "Select / Unselect All"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: classes/class-s2-admin.php:
|
1083 |
msgid "All Users and Subscribers"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#: classes/class-s2-admin.php:
|
1087 |
msgid "Confirmed"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
-
#: classes/class-s2-admin.php:
|
1091 |
msgid "Unconfirmed"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
-
#: classes/class-s2-admin.php:
|
1095 |
msgid "All Registered Users"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
-
#: classes/class-s2-admin.php:
|
1099 |
msgid "Post Author"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
-
#: classes/class-s2-admin.php:
|
1103 |
-
msgid ""
|
1104 |
-
"The WordPress cron functions may be disabled on this server. Digest "
|
1105 |
-
"notifications may not work."
|
1106 |
msgstr ""
|
1107 |
|
1108 |
-
#: classes/class-s2-admin.php:
|
1109 |
msgid "For each Post"
|
1110 |
msgstr ""
|
1111 |
|
1112 |
-
#: classes/class-s2-admin.php:
|
1113 |
msgid "Current UTC time is"
|
1114 |
msgstr ""
|
1115 |
|
1116 |
-
#: classes/class-s2-admin.php:
|
1117 |
msgid "Current blog time is"
|
1118 |
msgstr ""
|
1119 |
|
1120 |
-
#: classes/class-s2-admin.php:
|
1121 |
msgid "Next email notification will be sent when your blog time is after"
|
1122 |
msgstr ""
|
1123 |
|
1124 |
-
#: classes/class-s2-admin.php:
|
1125 |
msgid "Attempt to resend the last Digest Notification email"
|
1126 |
msgstr ""
|
1127 |
|
1128 |
-
#: classes/class-s2-admin.php:
|
1129 |
msgid "Resend Digest"
|
1130 |
msgstr ""
|
1131 |
|
1132 |
-
#: classes/class-s2-admin.php:
|
1133 |
msgid "Select a page"
|
1134 |
msgstr ""
|
1135 |
|
1136 |
-
#: classes/class-s2-admin.php:
|
1137 |
msgid "Email subscription"
|
1138 |
msgstr ""
|
1139 |
|
1140 |
-
#: classes/class-s2-admin.php:
|
1141 |
msgid "Subscribe / Unsubscribe"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
-
#: classes/class-s2-admin.php:
|
1145 |
msgid "Receive notifications"
|
1146 |
msgstr ""
|
1147 |
|
1148 |
-
#: classes/class-s2-admin.php:
|
1149 |
msgid "Check if you want to receive email notification when new posts are published"
|
1150 |
msgstr ""
|
1151 |
|
@@ -1157,40 +1066,46 @@ msgstr ""
|
|
1157 |
msgid "There was an error validating your request. Please try again later."
|
1158 |
msgstr ""
|
1159 |
|
1160 |
-
#: classes/class-s2-ajax.php:104
|
1161 |
-
#: classes/class-s2-ajax.php:
|
|
|
|
|
1162 |
msgid "A confirmation message is on its way!"
|
1163 |
msgstr ""
|
1164 |
|
1165 |
-
#: classes/class-s2-ajax.php:112
|
|
|
1166 |
msgid "Sorry, but that does not look like an email address to me."
|
1167 |
msgstr ""
|
1168 |
|
1169 |
-
#: classes/class-s2-ajax.php:114
|
1170 |
-
|
1171 |
-
"Sorry, email addresses at that domain are currently barred due to spam, "
|
1172 |
-
"please use an alternative email address."
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#: classes/class-s2-ajax.php:120
|
|
|
1176 |
msgid "Slow down, you move too fast."
|
1177 |
msgstr ""
|
1178 |
|
1179 |
-
#: classes/class-s2-ajax.php:126
|
1180 |
#. Translators: Link to login page
|
|
|
1181 |
msgid "To manage your subscription options please <a href=\"%1$s\">login.</a>"
|
1182 |
msgstr ""
|
1183 |
|
1184 |
-
#: classes/class-s2-ajax.php:136
|
|
|
1185 |
#: classes/class-s2-frontend.php:34
|
1186 |
msgid "Sorry, there seems to be an error on the server. Please try again later."
|
1187 |
msgstr ""
|
1188 |
|
1189 |
-
#: classes/class-s2-ajax.php:140
|
|
|
1190 |
msgid "That email address is already subscribed."
|
1191 |
msgstr ""
|
1192 |
|
1193 |
-
#: classes/class-s2-ajax.php:144
|
|
|
1194 |
msgid "That email address is not subscribed."
|
1195 |
msgstr ""
|
1196 |
|
@@ -1215,9 +1130,7 @@ msgid "Check here to Subscribe to email notifications for new posts"
|
|
1215 |
msgstr ""
|
1216 |
|
1217 |
#: classes/class-s2-core.php:1257
|
1218 |
-
msgid ""
|
1219 |
-
"By registering with this blog you are also agreeing to receive email "
|
1220 |
-
"notifications for new posts but you can unsubscribe at anytime"
|
1221 |
msgstr ""
|
1222 |
|
1223 |
#: classes/class-s2-core.php:1285
|
@@ -1228,7 +1141,8 @@ msgstr ""
|
|
1228 |
msgid "Weekly"
|
1229 |
msgstr ""
|
1230 |
|
1231 |
-
#: classes/class-s2-core.php:1622
|
|
|
1232 |
msgid "Author"
|
1233 |
msgstr ""
|
1234 |
|
@@ -1236,11 +1150,13 @@ msgstr ""
|
|
1236 |
msgid "Posted on"
|
1237 |
msgstr ""
|
1238 |
|
1239 |
-
#: classes/class-s2-core.php:1656
|
|
|
1240 |
msgid "Posted in"
|
1241 |
msgstr ""
|
1242 |
|
1243 |
-
#: classes/class-s2-core.php:1670
|
|
|
1244 |
msgid "Tagged as"
|
1245 |
msgstr ""
|
1246 |
|
@@ -1368,11 +1284,14 @@ msgstr ""
|
|
1368 |
msgid "Disable Anti-spam measures"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
-
#: classes/class-s2-form-widget.php:182
|
|
|
|
|
1372 |
msgid "Disable wrapping of form buttons"
|
1373 |
msgstr ""
|
1374 |
|
1375 |
-
#: classes/class-s2-forms.php:17
|
|
|
1376 |
msgid "Permission error! Your request cannot be completed."
|
1377 |
msgstr ""
|
1378 |
|
@@ -1424,11 +1343,13 @@ msgstr ""
|
|
1424 |
msgid "Subscribed Blogs"
|
1425 |
msgstr ""
|
1426 |
|
1427 |
-
#: classes/class-s2-forms.php:168
|
|
|
1428 |
msgid "Viewing Settings Now"
|
1429 |
msgstr ""
|
1430 |
|
1431 |
-
#: classes/class-s2-forms.php:172
|
|
|
1432 |
msgid "View Settings"
|
1433 |
msgstr ""
|
1434 |
|
@@ -1440,23 +1361,19 @@ msgstr ""
|
|
1440 |
msgid "Subscription preferences updated."
|
1441 |
msgstr ""
|
1442 |
|
1443 |
-
#: classes/class-s2-frontend.php:8
|
1444 |
#. Translators: Link to login page
|
|
|
1445 |
msgid "To manage your subscription options please <a href=\"%1$s\">login</a>."
|
1446 |
msgstr ""
|
1447 |
|
1448 |
-
#: classes/class-s2-frontend.php:12
|
1449 |
#. Translators: Link to Profile page
|
1450 |
-
|
1451 |
-
"You may manage your subscription options from your <a "
|
1452 |
-
"href=\"%1$s\">profile</a>."
|
1453 |
msgstr ""
|
1454 |
|
1455 |
-
#: classes/class-s2-frontend.php:20
|
1456 |
#. Translators: Link to Profile page
|
1457 |
-
|
1458 |
-
"<a href=\"%1$s\">Subscribe</a> to email notifications when this blog posts "
|
1459 |
-
"new content."
|
1460 |
msgstr ""
|
1461 |
|
1462 |
#: classes/class-s2-frontend.php:37
|
@@ -1483,7 +1400,8 @@ msgstr ""
|
|
1483 |
msgid "Enter email address..."
|
1484 |
msgstr ""
|
1485 |
|
1486 |
-
#: classes/class-s2-frontend.php:155
|
|
|
1487 |
msgid "Your email:"
|
1488 |
msgstr ""
|
1489 |
|
@@ -1515,77 +1433,56 @@ msgstr ""
|
|
1515 |
msgid "[Un]Subscribe to Posts"
|
1516 |
msgstr ""
|
1517 |
|
1518 |
-
#: classes/class-s2-list-table
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1519 |
#: classes/class-s2-list-table.php:112
|
1520 |
msgid "Select All"
|
1521 |
msgstr ""
|
1522 |
|
1523 |
-
#: classes/class-s2-list-table
|
1524 |
-
#: classes/class-s2-list-table
|
1525 |
-
#: classes/class-s2-list-table.php:167 classes/class-s2-list-table.php:172
|
1526 |
msgid "Delete"
|
1527 |
msgstr ""
|
1528 |
|
1529 |
-
#: classes/class-s2-list-table-legacy.php:189
|
1530 |
#: classes/class-s2-list-table.php:173
|
1531 |
msgid "Toggle"
|
1532 |
msgstr ""
|
1533 |
|
1534 |
-
#: classes/class-s2-list-table-legacy.php:198
|
1535 |
#: classes/class-s2-list-table.php:182
|
1536 |
msgid "No users were selected."
|
1537 |
msgstr ""
|
1538 |
|
1539 |
-
#: classes/class-s2-list-table-legacy.php:211
|
1540 |
#: classes/class-s2-list-table.php:195
|
1541 |
msgid "Address(es) deleted!"
|
1542 |
msgstr ""
|
1543 |
|
1544 |
-
#: classes/class-s2-list-table-legacy.php:215
|
1545 |
#: classes/class-s2-list-table.php:199
|
1546 |
msgid "Delete failed! You cannot delete some or all of these users."
|
1547 |
msgstr ""
|
1548 |
|
1549 |
-
#: classes/class-s2-list-table-legacy.php:218
|
1550 |
#: classes/class-s2-list-table.php:202
|
1551 |
-
msgid ""
|
1552 |
-
"Registered user(s) deleted! Any posts made by these users were assigned to "
|
1553 |
-
"you."
|
1554 |
msgstr ""
|
1555 |
|
1556 |
-
#: classes/class-s2-list-table-legacy.php:242
|
1557 |
#: classes/class-s2-list-table.php:226
|
1558 |
msgid "Status changed!"
|
1559 |
msgstr ""
|
1560 |
|
1561 |
-
#: classes/class-s2-list-table-legacy.php:259
|
1562 |
-
#: classes/class-s2-list-table.php:247
|
1563 |
#. Translators: Pagination
|
|
|
1564 |
msgid "%s item"
|
1565 |
msgid_plural "%s items"
|
1566 |
msgstr[0] ""
|
1567 |
msgstr[1] ""
|
1568 |
|
1569 |
-
#: classes/class-s2-list-table-legacy.php:307
|
1570 |
-
msgid "Go to the first page"
|
1571 |
-
msgstr ""
|
1572 |
-
|
1573 |
-
#: classes/class-s2-list-table-legacy.php:315
|
1574 |
-
msgid "Go to the previous page"
|
1575 |
-
msgstr ""
|
1576 |
-
|
1577 |
-
#: classes/class-s2-list-table-legacy.php:325
|
1578 |
-
msgid "Current page"
|
1579 |
-
msgstr ""
|
1580 |
-
|
1581 |
-
#: classes/class-s2-list-table-legacy.php:338
|
1582 |
-
msgid "Go to the next page"
|
1583 |
-
msgstr ""
|
1584 |
-
|
1585 |
-
#: classes/class-s2-list-table-legacy.php:346
|
1586 |
-
msgid "Go to the last page"
|
1587 |
-
msgstr ""
|
1588 |
-
|
1589 |
#: classes/class-s2-list-table.php:308
|
1590 |
msgid "First page"
|
1591 |
msgstr ""
|
@@ -1594,10 +1491,17 @@ msgstr ""
|
|
1594 |
msgid "Previous page"
|
1595 |
msgstr ""
|
1596 |
|
1597 |
-
#: classes/class-s2-list-table.php:326
|
|
|
1598 |
msgid "Current Page"
|
1599 |
msgstr ""
|
1600 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1601 |
#: classes/class-s2-list-table.php:346
|
1602 |
msgid "Next page"
|
1603 |
msgstr ""
|
@@ -1607,75 +1511,94 @@ msgid "Last page"
|
|
1607 |
msgstr ""
|
1608 |
|
1609 |
#: gutenberg/gutenberg-translations.php:5
|
|
|
1610 |
msgid "Subscribe2 HTML"
|
1611 |
msgstr ""
|
1612 |
|
1613 |
#: gutenberg/gutenberg-translations.php:6
|
|
|
1614 |
msgid "email"
|
1615 |
msgstr ""
|
1616 |
|
1617 |
#: gutenberg/gutenberg-translations.php:7
|
|
|
1618 |
msgid "notification"
|
1619 |
msgstr ""
|
1620 |
|
1621 |
#: gutenberg/gutenberg-translations.php:8
|
|
|
1622 |
msgid "Subscribe2 Shortcode Parameters"
|
1623 |
msgstr ""
|
1624 |
|
1625 |
#: gutenberg/gutenberg-translations.php:9
|
|
|
1626 |
msgid "Button Display Options"
|
1627 |
msgstr ""
|
1628 |
|
1629 |
#: gutenberg/gutenberg-translations.php:10
|
|
|
1630 |
msgid "Show Both Buttons"
|
1631 |
msgstr ""
|
1632 |
|
1633 |
#: gutenberg/gutenberg-translations.php:11
|
|
|
1634 |
msgid "Hide Subscribe Button"
|
1635 |
msgstr ""
|
1636 |
|
1637 |
#: gutenberg/gutenberg-translations.php:12
|
|
|
1638 |
msgid "Hide Unsubscribe Button"
|
1639 |
msgstr ""
|
1640 |
|
1641 |
#: gutenberg/gutenberg-translations.php:13
|
|
|
1642 |
msgid "Page ID"
|
1643 |
msgstr ""
|
1644 |
|
1645 |
#: gutenberg/gutenberg-translations.php:14
|
|
|
1646 |
msgid "Disable Javascript"
|
1647 |
msgstr ""
|
1648 |
|
1649 |
#: gutenberg/gutenberg-translations.php:15
|
|
|
1650 |
msgid "Disable Simple Anti-Spam Measures"
|
1651 |
msgstr ""
|
1652 |
|
1653 |
#: gutenberg/gutenberg-translations.php:16
|
|
|
1654 |
msgid "Textbox size"
|
1655 |
msgstr ""
|
1656 |
|
1657 |
#: gutenberg/gutenberg-translations.php:18
|
|
|
1658 |
msgid "Link Text"
|
1659 |
msgstr ""
|
1660 |
|
1661 |
#: gutenberg/gutenberg-translations.php:19
|
|
|
1662 |
msgid "Subscribe2 HTML Shortcode"
|
1663 |
msgstr ""
|
1664 |
|
1665 |
#: gutenberg/gutenberg-translations.php:24
|
|
|
1666 |
msgid "Attempt made to send email preview"
|
1667 |
msgstr ""
|
1668 |
|
1669 |
#: gutenberg/gutenberg-translations.php:25
|
|
|
1670 |
msgid "Attempt made to resend email notification"
|
1671 |
msgstr ""
|
1672 |
|
1673 |
#: gutenberg/gutenberg-translations.php:26
|
1674 |
#: gutenberg/gutenberg-translations.php:27
|
|
|
|
|
1675 |
msgid "Subscribe2 Sidebar"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
#: gutenberg/gutenberg-translations.php:28
|
|
|
1679 |
msgid "Subscribe2 Override"
|
1680 |
msgstr ""
|
1681 |
|
@@ -1688,8 +1611,7 @@ msgid ""
|
|
1688 |
"You may view the latest post at\n"
|
1689 |
"{PERMALINK}\n"
|
1690 |
"\n"
|
1691 |
-
"You received this e-mail because you asked to be notified when new updates "
|
1692 |
-
"are posted.\n"
|
1693 |
"Best regards,\n"
|
1694 |
"{MYNAME}\n"
|
1695 |
"{EMAIL}"
|
@@ -1697,8 +1619,7 @@ msgstr ""
|
|
1697 |
|
1698 |
#: include/options.php:148
|
1699 |
msgid ""
|
1700 |
-
"{BLOGNAME} has received a request to {ACTION} for this email address. To "
|
1701 |
-
"complete your request please click on the link below:\n"
|
1702 |
"\n"
|
1703 |
"{LINK}\n"
|
1704 |
"\n"
|
@@ -1714,15 +1635,13 @@ msgstr ""
|
|
1714 |
|
1715 |
#: include/options.php:156
|
1716 |
msgid ""
|
1717 |
-
"This email address was subscribed for notifications at {BLOGNAME} "
|
1718 |
-
"({BLOGLINK}) but the subscription remains incomplete.\n"
|
1719 |
"\n"
|
1720 |
"If you wish to complete your subscription please click on the link below:\n"
|
1721 |
"\n"
|
1722 |
"{LINK}\n"
|
1723 |
"\n"
|
1724 |
-
"If you do not wish to complete your subscription please ignore this email "
|
1725 |
-
"and your address will be removed from our database.\n"
|
1726 |
"\n"
|
1727 |
"Regards,\n"
|
1728 |
"{MYNAME}"
|
@@ -1736,47 +1655,11 @@ msgstr ""
|
|
1736 |
msgid "I'm just a plugin, please don't call me directly"
|
1737 |
msgstr ""
|
1738 |
|
|
|
1739 |
#: subscribe2.php:39
|
1740 |
-
|
1741 |
-
#. compatible version
|
1742 |
-
msgid ""
|
1743 |
-
"This version of Subscribe2 requires WordPress 3.3 or greater. Please update "
|
1744 |
-
"%1$s or use an older version of %2$s."
|
1745 |
msgstr ""
|
1746 |
|
1747 |
#: subscribe2.php:51
|
1748 |
-
msgid ""
|
1749 |
-
"Subscribe2 HTML cannot be activated as a network plugin. Please activate it "
|
1750 |
-
"on a site level"
|
1751 |
-
msgstr ""
|
1752 |
-
|
1753 |
-
#. Author URI of the plugin/theme
|
1754 |
-
msgid "https://subscribe2.wordpress.com/"
|
1755 |
-
msgstr ""
|
1756 |
-
|
1757 |
-
#. Description of the plugin/theme
|
1758 |
-
msgid "Notifies an email list when new entries are posted."
|
1759 |
msgstr ""
|
1760 |
-
|
1761 |
-
#: classes/class-s2-admin.php:567
|
1762 |
-
msgctxt "Comma Separated Column Header names for CSV Export"
|
1763 |
-
msgid "User Email,User Type,User Name,Confirm Date,IP"
|
1764 |
-
msgstr ""
|
1765 |
-
|
1766 |
-
#: classes/class-s2-list-table-legacy.php:75
|
1767 |
-
#: classes/class-s2-list-table-legacy.php:80 classes/class-s2-list-table.php:68
|
1768 |
-
msgctxt "column name"
|
1769 |
-
msgid "Email"
|
1770 |
-
msgstr ""
|
1771 |
-
|
1772 |
-
#: classes/class-s2-list-table-legacy.php:81 classes/class-s2-list-table.php:69
|
1773 |
-
msgctxt "column name"
|
1774 |
-
msgid "Date"
|
1775 |
-
msgstr ""
|
1776 |
-
|
1777 |
-
#: classes/class-s2-list-table-legacy.php:333
|
1778 |
-
#: classes/class-s2-list-table.php:338
|
1779 |
-
#. Translators: Pagination
|
1780 |
-
msgctxt "paging"
|
1781 |
-
msgid "%1$s of %2$s"
|
1782 |
-
msgstr ""
|
1 |
+
# Copyright (C) 2020 weMail
|
2 |
+
# This file is distributed under the same license as the Subscribe2 plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Subscribe2 10.33\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/subscribe2\n"
|
|
|
|
|
|
|
|
|
|
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"POT-Creation-Date: 2020-06-04T07:08:04+00:00\n"
|
13 |
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
+
"X-Generator: WP-CLI 2.4.0\n"
|
15 |
+
"X-Domain: subscribe2\n"
|
16 |
+
|
17 |
+
#. Plugin Name of the plugin
|
18 |
+
#: classes/class-s2-admin.php:8
|
19 |
+
#: classes/class-s2-form-widget.php:24
|
20 |
+
msgid "Subscribe2"
|
21 |
+
msgstr ""
|
22 |
+
|
23 |
+
#. Plugin URI of the plugin
|
24 |
+
#. Author URI of the plugin
|
25 |
+
msgid "https://getwemail.io"
|
26 |
+
msgstr ""
|
27 |
+
|
28 |
+
#. Description of the plugin
|
29 |
+
msgid "Notifies an email list when new entries are posted."
|
30 |
+
msgstr ""
|
31 |
+
|
32 |
+
#. Author of the plugin
|
33 |
+
msgid "weMail"
|
34 |
+
msgstr ""
|
35 |
+
|
36 |
+
#: admin/send-email.php:11
|
37 |
+
#: admin/settings.php:11
|
38 |
+
#: admin/subscribers.php:27
|
39 |
#: admin/your-subscriptions.php:13
|
40 |
msgid "Security error! Your request cannot be completed."
|
41 |
msgstr ""
|
101 |
msgstr ""
|
102 |
|
103 |
#: admin/settings.php:37
|
104 |
+
msgid "The Digest Notification email contained no post information. No email was sent"
|
|
|
|
|
105 |
msgstr ""
|
106 |
|
107 |
#: admin/settings.php:120
|
121 |
msgstr ""
|
122 |
|
123 |
#: admin/settings.php:152
|
124 |
+
msgid "Your chosen email type (per-post or digest) does not support the following keywords:"
|
|
|
|
|
125 |
msgstr ""
|
126 |
|
|
|
127 |
#. Translators: Warning message
|
128 |
+
#: admin/settings.php:166
|
129 |
+
msgid "You appear to be sending notifications from %1$s, which has a different domain name than your blog server %2$s. This may result in failed emails."
|
|
|
130 |
msgstr ""
|
131 |
|
132 |
+
#: admin/settings.php:174
|
133 |
+
#: classes/class-s2-admin.php:22
|
134 |
+
#: classes/class-s2-admin.php:249
|
135 |
msgid "Settings"
|
136 |
msgstr ""
|
137 |
|
138 |
+
#: admin/settings.php:176
|
139 |
+
#: classes/class-s2-admin.php:116
|
140 |
msgid "Email Settings"
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: admin/settings.php:177
|
144 |
+
#: classes/class-s2-admin.php:126
|
145 |
msgid "Templates"
|
146 |
msgstr ""
|
147 |
|
148 |
+
#: admin/settings.php:178
|
149 |
+
#: classes/class-s2-admin.php:136
|
150 |
msgid "Registered Users"
|
151 |
msgstr ""
|
152 |
|
153 |
+
#: admin/settings.php:179
|
154 |
+
#: classes/class-s2-admin.php:145
|
155 |
msgid "Appearance"
|
156 |
msgstr ""
|
157 |
|
158 |
+
#: admin/settings.php:180
|
159 |
+
#: classes/class-s2-admin.php:154
|
160 |
msgid "Miscellaneous"
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: admin/settings.php:203
|
164 |
+
#: classes/class-s2-admin.php:825
|
165 |
+
#: classes/class-s2-list-table.php:36
|
166 |
msgid "Edit"
|
167 |
msgstr ""
|
168 |
|
169 |
+
#: admin/settings.php:206
|
170 |
+
#: classes/class-s2-admin.php:839
|
171 |
msgid "Update"
|
172 |
msgstr ""
|
173 |
|
174 |
+
#: admin/settings.php:207
|
175 |
+
#: classes/class-s2-admin.php:840
|
176 |
msgid "Revert"
|
177 |
msgstr ""
|
178 |
|
200 |
msgid "Include theme CSS stylesheet in HTML notifications"
|
201 |
msgstr ""
|
202 |
|
203 |
+
#: admin/settings.php:221
|
204 |
+
#: admin/settings.php:227
|
205 |
+
#: admin/settings.php:241
|
206 |
+
#: admin/settings.php:246
|
207 |
+
#: admin/settings.php:252
|
208 |
+
#: admin/settings.php:390
|
209 |
+
#: admin/settings.php:396
|
210 |
+
#: admin/settings.php:411
|
211 |
+
#: admin/settings.php:419
|
212 |
+
#: admin/settings.php:435
|
213 |
+
#: admin/settings.php:442
|
214 |
+
#: admin/subscribers.php:323
|
215 |
+
#: classes/class-s2-forms.php:59
|
216 |
+
#: classes/class-s2-forms.php:100
|
217 |
msgid "Yes"
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: admin/settings.php:223
|
221 |
+
#: admin/settings.php:229
|
222 |
+
#: admin/settings.php:243
|
223 |
+
#: admin/settings.php:248
|
224 |
+
#: admin/settings.php:254
|
225 |
+
#: admin/settings.php:387
|
226 |
+
#: admin/settings.php:392
|
227 |
+
#: admin/settings.php:398
|
228 |
+
#: admin/settings.php:413
|
229 |
+
#: admin/settings.php:421
|
230 |
+
#: admin/settings.php:431
|
231 |
+
#: admin/settings.php:437
|
232 |
+
#: admin/settings.php:444
|
233 |
+
#: admin/subscribers.php:325
|
234 |
+
#: classes/class-s2-forms.php:61
|
235 |
+
#: classes/class-s2-forms.php:104
|
236 |
msgid "No"
|
237 |
msgstr ""
|
238 |
|
240 |
msgid "Send Emails for Pages"
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: admin/settings.php:234
|
244 |
+
msgid "Subscribe2 will send email notifications for the following custom post types"
|
245 |
+
msgstr ""
|
246 |
+
|
247 |
+
#: admin/settings.php:239
|
248 |
msgid "Send Emails for Password Protected Posts"
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: admin/settings.php:244
|
252 |
msgid "Send Emails for Private Posts"
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: admin/settings.php:250
|
256 |
msgid "Include Sticky Posts at the top of all Digest Notifications"
|
257 |
msgstr ""
|
258 |
|
259 |
+
#: admin/settings.php:256
|
260 |
msgid "Send Email From"
|
261 |
msgstr ""
|
262 |
|
263 |
+
#: admin/settings.php:261
|
264 |
msgid "Send Emails"
|
265 |
msgstr ""
|
266 |
|
267 |
+
#: admin/settings.php:265
|
268 |
msgid "For digest notifications, date order for posts is"
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: admin/settings.php:267
|
272 |
msgid "Descending"
|
273 |
msgstr ""
|
274 |
|
275 |
+
#: admin/settings.php:269
|
276 |
msgid "Ascending"
|
277 |
msgstr ""
|
278 |
|
279 |
+
#: admin/settings.php:271
|
280 |
msgid "Add Tracking Parameters to the Permalink"
|
281 |
msgstr ""
|
282 |
|
283 |
+
#: admin/settings.php:273
|
284 |
+
msgid "eg. utm_source=subscribe2&utm_medium=email&utm_campaign=postnotify&utm_id={ID}&utm_title={TITLE}"
|
|
|
|
|
|
|
285 |
msgstr ""
|
286 |
|
287 |
+
#: admin/settings.php:284
|
288 |
msgid "Notification email (must not be empty)"
|
289 |
msgstr ""
|
290 |
|
291 |
+
#: admin/settings.php:285
|
292 |
+
#: admin/settings.php:324
|
293 |
+
#: admin/settings.php:329
|
294 |
msgid "Subject Line"
|
295 |
msgstr ""
|
296 |
|
297 |
+
#: admin/settings.php:290
|
298 |
msgid "Send Email Preview"
|
299 |
msgstr ""
|
300 |
|
301 |
+
#: admin/settings.php:291
|
302 |
msgid "Message substitutions"
|
303 |
msgstr ""
|
304 |
|
305 |
+
#: admin/settings.php:293
|
306 |
msgid "IF THE FOLLOWING KEYWORDS ARE ALSO IN YOUR POST THEY WILL BE SUBSTITUTED"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: admin/settings.php:296
|
310 |
msgid "the post's title<br>(<i>for per-post emails only</i>)"
|
311 |
msgstr ""
|
312 |
|
313 |
+
#: admin/settings.php:297
|
314 |
msgid "the post's unformatted title <br>(<i>for per-post emails only</i>)"
|
315 |
msgstr ""
|
316 |
|
317 |
+
#: admin/settings.php:298
|
318 |
+
msgid "the excerpt or the entire post<br>(<i>based on the subscriber's preferences</i>)"
|
|
|
|
|
319 |
msgstr ""
|
320 |
|
321 |
+
#: admin/settings.php:299
|
322 |
+
msgid "the excerpt of the post and the time it was posted<br>(<i>for digest emails only</i>)"
|
|
|
|
|
323 |
msgstr ""
|
324 |
|
325 |
+
#: admin/settings.php:300
|
326 |
msgid "a list of post titles<br>(<i>for digest emails only</i>)"
|
327 |
msgstr ""
|
328 |
|
329 |
+
#: admin/settings.php:301
|
330 |
+
msgid "a list of post titles followed by links to the articles<br>(<i>for digest emails only</i>)"
|
|
|
|
|
331 |
msgstr ""
|
332 |
|
333 |
+
#: admin/settings.php:302
|
334 |
+
msgid "a reference style list of links at the end of the email with corresponding numbers in the content<br>(<i>for the full content plain text per-post email only</i>)"
|
|
|
|
|
|
|
335 |
msgstr ""
|
336 |
|
337 |
+
#: admin/settings.php:303
|
338 |
msgid "the post's permalink<br>(<i>for per-post emails only</i>)"
|
339 |
msgstr ""
|
340 |
|
341 |
+
#: admin/settings.php:304
|
342 |
msgid "the post's permalink after conversion by TinyURL"
|
343 |
msgstr ""
|
344 |
|
345 |
+
#: admin/settings.php:305
|
346 |
msgid "the post's unformatted permalink<br>(<i>for per-post emails only</i>)"
|
347 |
msgstr ""
|
348 |
|
349 |
+
#: admin/settings.php:306
|
350 |
msgid "the date the post was made<br>(<i>for per-post emails only</i>)"
|
351 |
msgstr ""
|
352 |
|
353 |
+
#: admin/settings.php:307
|
354 |
msgid "the time the post was made<br>(<i>for per-post emails only</i>)"
|
355 |
msgstr ""
|
356 |
|
357 |
+
#: admin/settings.php:308
|
358 |
msgid "the admin or post author's name"
|
359 |
msgstr ""
|
360 |
|
361 |
+
#: admin/settings.php:309
|
362 |
msgid "the admin or post author's email"
|
363 |
msgstr ""
|
364 |
|
365 |
+
#: admin/settings.php:310
|
366 |
msgid "the post author's name"
|
367 |
msgstr ""
|
368 |
|
369 |
+
#: admin/settings.php:311
|
370 |
+
msgid "the generated link to confirm a request<br>(<i>only used in the confirmation email template</i>)"
|
|
|
|
|
371 |
msgstr ""
|
372 |
|
373 |
+
#: admin/settings.php:313
|
374 |
+
msgid "a generated unsubscribe link<br>(<i>only used in the email notification template</i>)"
|
|
|
|
|
375 |
msgstr ""
|
376 |
|
377 |
+
#: admin/settings.php:315
|
378 |
+
msgid "Action performed by LINK in confirmation email<br>(<i>only used in the confirmation email template</i>)"
|
|
|
|
|
379 |
msgstr ""
|
380 |
|
381 |
+
#: admin/settings.php:316
|
382 |
msgid "the post's assigned categories"
|
383 |
msgstr ""
|
384 |
|
385 |
+
#: admin/settings.php:317
|
386 |
msgid "the post's assigned Tags"
|
387 |
msgstr ""
|
388 |
|
389 |
+
#: admin/settings.php:318
|
390 |
+
msgid "the number of posts included in the digest email<br>(<i>for digest emails only</i>)"
|
|
|
|
|
391 |
msgstr ""
|
392 |
|
393 |
+
#: admin/settings.php:320
|
394 |
msgid "the post's featured image"
|
395 |
msgstr ""
|
396 |
|
397 |
+
#: admin/settings.php:323
|
398 |
msgid "Subscribe / Unsubscribe confirmation email"
|
399 |
msgstr ""
|
400 |
|
401 |
+
#: admin/settings.php:328
|
402 |
msgid "Reminder email to Unconfirmed Subscribers"
|
403 |
msgstr ""
|
404 |
|
405 |
+
#: admin/settings.php:344
|
406 |
msgid "Compulsory Categories"
|
407 |
msgstr ""
|
408 |
|
409 |
+
#: admin/settings.php:346
|
410 |
msgid "Compulsory categories will be checked by default for Registered Subscribers"
|
411 |
msgstr ""
|
412 |
|
413 |
+
#: admin/settings.php:353
|
414 |
msgid "Excluded Categories"
|
415 |
msgstr ""
|
416 |
|
417 |
+
#: admin/settings.php:355
|
418 |
+
msgid "Posts assigned to any Excluded Category do not generate notifications and are not included in digest notifications"
|
|
|
|
|
419 |
msgstr ""
|
420 |
|
421 |
+
#: admin/settings.php:359
|
422 |
msgid "Allow registered users to subscribe to excluded categories?"
|
423 |
msgstr ""
|
424 |
|
425 |
+
#: admin/settings.php:367
|
426 |
msgid "Excluded Formats"
|
427 |
msgstr ""
|
428 |
|
429 |
+
#: admin/settings.php:369
|
430 |
+
msgid "Posts assigned to any Excluded Format do not generate notifications and are not included in digest notifications"
|
|
|
|
|
431 |
msgstr ""
|
432 |
|
433 |
+
#: admin/settings.php:377
|
434 |
msgid "Auto-Subscribe"
|
435 |
msgstr ""
|
436 |
|
437 |
+
#: admin/settings.php:379
|
438 |
msgid "Subscribe new users registering with your blog"
|
439 |
msgstr ""
|
440 |
|
441 |
+
#: admin/settings.php:382
|
442 |
msgid "Automatically"
|
443 |
msgstr ""
|
444 |
|
445 |
+
#: admin/settings.php:385
|
446 |
msgid "Display option on Registration Form"
|
447 |
msgstr ""
|
448 |
|
449 |
+
#: admin/settings.php:388
|
450 |
msgid "Auto-subscribe includes any excluded categories"
|
451 |
msgstr ""
|
452 |
|
453 |
+
#: admin/settings.php:394
|
454 |
msgid "Registration Form option is checked by default"
|
455 |
msgstr ""
|
456 |
|
457 |
+
#: admin/settings.php:400
|
458 |
msgid "Auto-subscribe users to receive email as"
|
459 |
msgstr ""
|
460 |
|
461 |
+
#: admin/settings.php:402
|
462 |
+
#: admin/subscribers.php:309
|
463 |
#: classes/class-s2-forms.php:48
|
464 |
msgid "HTML - Full"
|
465 |
msgstr ""
|
466 |
|
467 |
+
#: admin/settings.php:404
|
468 |
+
#: admin/subscribers.php:310
|
469 |
#: classes/class-s2-forms.php:50
|
470 |
msgid "HTML - Excerpt"
|
471 |
msgstr ""
|
472 |
|
473 |
+
#: admin/settings.php:406
|
474 |
+
#: admin/subscribers.php:311
|
475 |
#: classes/class-s2-forms.php:52
|
476 |
msgid "Plain Text - Full"
|
477 |
msgstr ""
|
478 |
|
479 |
+
#: admin/settings.php:408
|
480 |
+
#: admin/subscribers.php:312
|
481 |
#: classes/class-s2-forms.php:54
|
482 |
msgid "Plain Text - Excerpt"
|
483 |
msgstr ""
|
484 |
|
485 |
+
#: admin/settings.php:409
|
486 |
msgid "Registered Users have the option to auto-subscribe to new categories"
|
487 |
msgstr ""
|
488 |
|
489 |
+
#: admin/settings.php:415
|
490 |
msgid "New categories are immediately excluded"
|
491 |
msgstr ""
|
492 |
|
493 |
+
#: admin/settings.php:417
|
494 |
+
msgid "Option for Registered Users to auto-subscribe to new categories is checked by default"
|
|
|
|
|
495 |
msgstr ""
|
496 |
|
497 |
+
#: admin/settings.php:425
|
498 |
msgid "Display checkbox to allow subscriptions from the comment form"
|
499 |
msgstr ""
|
500 |
|
501 |
+
#: admin/settings.php:427
|
502 |
msgid "Before the Comment Submit button"
|
503 |
msgstr ""
|
504 |
|
505 |
+
#: admin/settings.php:429
|
506 |
msgid "After the Comment Submit button"
|
507 |
msgstr ""
|
508 |
|
509 |
+
#: admin/settings.php:433
|
510 |
msgid "Comment form checkbox is checked by default"
|
511 |
msgstr ""
|
512 |
|
513 |
+
#: admin/settings.php:440
|
514 |
msgid "Show one-click subscription on profile page"
|
515 |
msgstr ""
|
516 |
|
517 |
+
#: admin/settings.php:455
|
518 |
msgid "Set default Subscribe2 page as"
|
519 |
msgstr ""
|
520 |
|
521 |
+
#: admin/settings.php:460
|
522 |
msgid "Show a link to your subscription page in \"meta\"?"
|
523 |
msgstr ""
|
524 |
|
525 |
+
#: admin/settings.php:464
|
526 |
msgid "Show the Subscribe2 button on the Write toolbar?"
|
527 |
msgstr ""
|
528 |
|
529 |
+
#: admin/settings.php:468
|
530 |
msgid "Enable popup style subscription form?"
|
531 |
msgstr ""
|
532 |
|
533 |
+
#: admin/settings.php:472
|
534 |
msgid "Enable Subscribe2 Widget?"
|
535 |
msgstr ""
|
536 |
|
537 |
+
#: admin/settings.php:476
|
538 |
msgid "Enable Subscribe2 Counter Widget?"
|
539 |
msgstr ""
|
540 |
|
541 |
+
#: admin/settings.php:480
|
542 |
msgid "Disable email notifications is checked by default on authoring pages?"
|
543 |
msgstr ""
|
544 |
|
545 |
+
#: admin/settings.php:484
|
546 |
+
msgid "Use javascript to update IP address in Subscribe2 HTML form data? (useful if caching is enabled)"
|
|
|
|
|
547 |
msgstr ""
|
548 |
|
549 |
+
#: admin/settings.php:492
|
550 |
msgid "Barred Domains"
|
551 |
msgstr ""
|
552 |
|
553 |
+
#: admin/settings.php:494
|
554 |
+
msgid "Enter domains to bar for public subscriptions, wildcards (*) and exceptions (!) are allowed"
|
|
|
|
|
555 |
msgstr ""
|
556 |
|
557 |
+
#: admin/settings.php:495
|
558 |
+
msgid "Use a new line for each entry and omit the \"@\" symbol, for example !email.com, hotmail.com, yahoo.*"
|
|
|
|
|
559 |
msgstr ""
|
560 |
|
561 |
+
#: admin/settings.php:498
|
562 |
msgid "Links"
|
563 |
msgstr ""
|
564 |
|
565 |
+
#: admin/settings.php:499
|
566 |
msgid "Plugin Site"
|
567 |
msgstr ""
|
568 |
|
569 |
+
#: admin/settings.php:500
|
570 |
msgid "Plugin Forum"
|
571 |
msgstr ""
|
572 |
|
573 |
+
#: admin/settings.php:501
|
574 |
msgid "Plugin Blog"
|
575 |
msgstr ""
|
576 |
|
577 |
+
#: admin/settings.php:507
|
|
|
|
|
|
|
|
|
578 |
msgid "Submit"
|
579 |
msgstr ""
|
580 |
|
581 |
+
#: admin/settings.php:511
|
582 |
msgid "Reset to Default Settings"
|
583 |
msgstr ""
|
584 |
|
585 |
+
#: admin/settings.php:512
|
586 |
+
msgid "Use this to reset all options to their defaults. This <strong><em>will not</em></strong> modify your list of subscribers."
|
|
|
|
|
587 |
msgstr ""
|
588 |
|
589 |
+
#: admin/settings.php:514
|
590 |
msgid "RESET"
|
591 |
msgstr ""
|
592 |
|
593 |
+
#: admin/subscribers.php:52
|
594 |
msgid "Address(es) subscribed!"
|
595 |
msgstr ""
|
596 |
|
597 |
+
#: admin/subscribers.php:59
|
598 |
msgid "Address(es) unsubscribed!"
|
599 |
msgstr ""
|
600 |
|
601 |
+
#: admin/subscribers.php:64
|
602 |
+
msgid "Some emails were not processed, the following are already Registered Subscribers"
|
|
|
|
|
603 |
msgstr ""
|
604 |
|
605 |
+
#: admin/subscribers.php:67
|
606 |
msgid "Some emails were not processed, the following are already Public Subscribers"
|
607 |
msgstr ""
|
608 |
|
609 |
+
#: admin/subscribers.php:70
|
610 |
msgid "Some emails were not processed, the following were not in the database"
|
611 |
msgstr ""
|
612 |
|
613 |
+
#: admin/subscribers.php:73
|
614 |
msgid "Some emails were not processed, the following were invalid email addresses"
|
615 |
msgstr ""
|
616 |
|
617 |
+
#: admin/subscribers.php:81
|
618 |
msgid "Reminder Email(s) Sent!"
|
619 |
msgstr ""
|
620 |
|
621 |
+
#: admin/subscribers.php:88
|
622 |
msgid "Registered Users Subscribed!"
|
623 |
msgstr ""
|
624 |
|
625 |
+
#: admin/subscribers.php:95
|
626 |
msgid "Registered Users Unsubscribed!"
|
627 |
msgstr ""
|
628 |
|
629 |
+
#: admin/subscribers.php:102
|
630 |
msgid "Format updated for Selected Registered Users!"
|
631 |
msgstr ""
|
632 |
|
633 |
+
#: admin/subscribers.php:109
|
634 |
msgid "Digest Subscription updated for Selected Registered Users!"
|
635 |
msgstr ""
|
636 |
|
637 |
+
#: admin/subscribers.php:194
|
638 |
+
#: classes/class-s2-admin.php:15
|
639 |
msgid "Subscribers"
|
640 |
msgstr ""
|
641 |
|
642 |
+
#: admin/subscribers.php:196
|
643 |
+
#: classes/class-s2-admin.php:69
|
644 |
+
#: classes/class-s2-admin.php:634
|
645 |
msgid "Public Subscribers"
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: admin/subscribers.php:197
|
649 |
+
#: classes/class-s2-admin.php:76
|
650 |
+
#: classes/class-s2-admin.php:638
|
651 |
msgid "Registered Subscribers"
|
652 |
msgstr ""
|
653 |
|
654 |
+
#: admin/subscribers.php:212
|
655 |
+
#: admin/subscribers.php:235
|
656 |
msgid "Add/Remove Subscribers"
|
657 |
msgstr ""
|
658 |
|
659 |
+
#: admin/subscribers.php:213
|
660 |
msgid "Enter addresses, one per line or comma-separated"
|
661 |
msgstr ""
|
662 |
|
663 |
+
#: admin/subscribers.php:216
|
664 |
+
#: admin/subscribers.php:300
|
665 |
+
#: classes/class-s2-forms.php:195
|
666 |
+
#: classes/class-s2-frontend.php:84
|
667 |
msgid "Subscribe"
|
668 |
msgstr ""
|
669 |
|
670 |
+
#: admin/subscribers.php:217
|
671 |
+
#: admin/subscribers.php:301
|
672 |
+
#: classes/class-s2-forms.php:174
|
673 |
+
#: classes/class-s2-frontend.php:83
|
674 |
msgid "Unsubscribe"
|
675 |
msgstr ""
|
676 |
|
677 |
+
#: admin/subscribers.php:222
|
678 |
+
#: admin/subscribers.php:242
|
679 |
msgid "Current Subscribers"
|
680 |
msgstr ""
|
681 |
|
682 |
+
#: admin/subscribers.php:236
|
683 |
msgid "Add Registered User"
|
684 |
msgstr ""
|
685 |
|
686 |
+
#: admin/subscribers.php:251
|
687 |
msgid "Filter"
|
688 |
msgstr ""
|
689 |
|
690 |
+
#: admin/subscribers.php:255
|
691 |
msgid "Send Reminder Email"
|
692 |
msgstr ""
|
693 |
|
694 |
+
#: admin/subscribers.php:269
|
695 |
msgid "Save Emails to CSV File"
|
696 |
msgstr ""
|
697 |
|
698 |
+
#: admin/subscribers.php:276
|
699 |
msgid "Search"
|
700 |
msgstr ""
|
701 |
|
702 |
+
#: admin/subscribers.php:283
|
703 |
msgid "Bulk Management"
|
704 |
msgstr ""
|
705 |
|
706 |
+
#: admin/subscribers.php:297
|
707 |
+
#: admin/subscribers.php:319
|
708 |
+
msgid "Preferences for Registered Users selected above can be changed using this section."
|
|
|
709 |
msgstr ""
|
710 |
|
711 |
+
#: admin/subscribers.php:298
|
712 |
msgid "Consider User Privacy as changes cannot be undone"
|
713 |
msgstr ""
|
714 |
|
715 |
+
#: admin/subscribers.php:299
|
716 |
msgid "Action to perform"
|
717 |
msgstr ""
|
718 |
|
719 |
+
#: admin/subscribers.php:307
|
720 |
msgid "Bulk Update Categories"
|
721 |
msgstr ""
|
722 |
|
723 |
+
#: admin/subscribers.php:308
|
724 |
msgid "Send email as"
|
725 |
msgstr ""
|
726 |
|
727 |
+
#: admin/subscribers.php:313
|
728 |
msgid "Bulk Update Format"
|
729 |
msgstr ""
|
730 |
|
731 |
+
#: admin/subscribers.php:320
|
732 |
msgid "Consider User Privacy as changes cannot be undone."
|
733 |
msgstr ""
|
734 |
|
735 |
+
#: admin/subscribers.php:321
|
736 |
msgid "Subscribe Selected Users to receive a periodic digest notification"
|
737 |
msgstr ""
|
738 |
|
739 |
+
#: admin/subscribers.php:326
|
740 |
msgid "Bulk Update Digest Subscription"
|
741 |
msgstr ""
|
742 |
|
752 |
msgid "Update Preferences"
|
753 |
msgstr ""
|
754 |
|
|
|
755 |
#. Translators: Mail Optin admin notice
|
756 |
+
#: classes/class-mo-admin-notice.php:61
|
757 |
+
msgid "Free email newsletter plugin that will %1$sincrease your email list subscribers%2$s and keep them engaged with %1$sautomated and schedule newsletters%2$s."
|
|
|
|
|
758 |
msgstr ""
|
759 |
|
760 |
+
#: classes/class-mo-admin-notice.php:72
|
761 |
+
msgid "Install weMail Now for Free!"
|
762 |
msgstr ""
|
763 |
|
764 |
+
#: classes/class-mo-admin-notice.php:77
|
765 |
+
msgid "Activate weMail Now!"
|
766 |
msgstr ""
|
767 |
|
768 |
+
#: classes/class-mo-admin-notice.php:86
|
769 |
msgid "Dismiss this notice"
|
770 |
msgstr ""
|
771 |
|
|
|
|
|
|
|
|
|
772 |
#: classes/class-s2-admin.php:10
|
773 |
msgid "Your Subscriptions"
|
774 |
msgstr ""
|
777 |
msgid "Send Email"
|
778 |
msgstr ""
|
779 |
|
780 |
+
#: classes/class-s2-admin.php:42
|
781 |
+
#: classes/class-s2-admin.php:50
|
782 |
+
#: classes/class-s2-admin.php:62
|
783 |
+
#: classes/class-s2-admin.php:109
|
784 |
+
#: classes/class-s2-admin.php:166
|
785 |
msgid "Overview"
|
786 |
msgstr ""
|
787 |
|
788 |
#: classes/class-s2-admin.php:43
|
789 |
+
msgid "From this page you can opt in or out of receiving a periodical digest style email of blog posts."
|
|
|
|
|
790 |
msgstr ""
|
791 |
|
792 |
#: classes/class-s2-admin.php:51
|
793 |
+
msgid "From this page you can control your subscription preferences. Choose the email format you wish to receive, which categories you would like to receive notification for and depending on the site settings which authors you would like to read."
|
|
|
|
|
|
|
|
|
794 |
msgstr ""
|
795 |
|
796 |
#: classes/class-s2-admin.php:63
|
798 |
msgstr ""
|
799 |
|
800 |
#: classes/class-s2-admin.php:70
|
801 |
+
msgid "Public Subscribers are subscribers who have used the plugin form and only provided their email address."
|
|
|
|
|
802 |
msgstr ""
|
803 |
|
804 |
#: classes/class-s2-admin.php:70
|
805 |
+
msgid "On this page public subscribers can be viewed, searched, deleted and also toggled between Confirmed and Unconfirmed status."
|
|
|
|
|
806 |
msgstr ""
|
807 |
|
808 |
#: classes/class-s2-admin.php:77
|
809 |
+
msgid "Registered Subscribers are subscribers who have registered in WordPress and have a username and password."
|
|
|
|
|
810 |
msgstr ""
|
811 |
|
812 |
#: classes/class-s2-admin.php:78
|
813 |
+
msgid "Registered Subscribers have greater personal control over their subscription. They can change the format of the email and also select which categories and authors they want to receive notifications about."
|
|
|
|
|
|
|
814 |
msgstr ""
|
815 |
|
816 |
#: classes/class-s2-admin.php:79
|
817 |
+
msgid "On this page registered subscribers can be viewed and searched. User accounts can be deleted from here with any posts created by those users being assigned to the currently logged in user. Bulk changes can be applied to all user settings changing their subscription email format and categories."
|
|
|
|
|
|
|
|
|
|
|
818 |
msgstr ""
|
819 |
|
820 |
#: classes/class-s2-admin.php:88
|
826 |
msgstr ""
|
827 |
|
828 |
#: classes/class-s2-admin.php:117
|
829 |
+
msgid "This section allows you to specify settings that apply to the emails generated by the site."
|
|
|
|
|
830 |
msgstr ""
|
831 |
|
832 |
#: classes/class-s2-admin.php:118
|
833 |
+
msgid "Emails can be sent to individual subscribers by setting the number of recipients per email to 1. A setting greater than one will group recipients together and make use of the BCC emails header. A setting of 0 sends a single email with all subscribers in one large BCC group. A setting of 1 looks less like spam email to filters but takes longer to process."
|
|
|
|
|
|
|
|
|
|
|
834 |
msgstr ""
|
835 |
|
836 |
#: classes/class-s2-admin.php:119
|
837 |
+
msgid "This section is also where the sender of the email on this page is chosen. You can choose Post Author or your Blogname but it is recommended to create a user account with an email address that really exists and shares the same domain name as your site (the bit after the @ should be the same as your sites web address) and then use this account."
|
|
|
|
|
|
|
|
|
|
|
838 |
msgstr ""
|
839 |
|
840 |
#: classes/class-s2-admin.php:120
|
841 |
+
msgid "This page also configures the frequency of emails. This can be at the time new posts are made (per post) or periodically with an excerpt of each post made (digest). Additionally the post types (pages, private, password protected) can also be configured here."
|
|
|
|
|
|
|
|
|
842 |
msgstr ""
|
843 |
|
844 |
#: classes/class-s2-admin.php:127
|
845 |
+
msgid "This section allows you to customise the content of your notification emails."
|
|
|
|
|
846 |
msgstr ""
|
847 |
|
848 |
#: classes/class-s2-admin.php:128
|
849 |
+
msgid "There are special {KEYWORDS} that are used by Subscribe2 to place content into the final email. The template also accepts regular text and HTML as desired in the final emails."
|
|
|
|
|
|
|
850 |
msgstr ""
|
851 |
|
852 |
#: classes/class-s2-admin.php:129
|
853 |
+
msgid "The {KEYWORDS} are listed on the right of the templates, note that some are for per post emails only and some are for digest emails only. Make sure the correct keywords are used based upon the Email Settings."
|
|
|
|
|
|
|
854 |
msgstr ""
|
855 |
|
856 |
#: classes/class-s2-admin.php:130
|
857 |
+
msgid "The Notification Email template is used for sending notifications of new posts. The Subscribe / Unsubscribe confirmation template is sent when a new subscription or unsubscription request is made. The Reminder template is used to send reminder emails; this is done automatically or can be done manually."
|
|
|
|
|
|
|
|
|
|
|
858 |
msgstr ""
|
859 |
|
860 |
#: classes/class-s2-admin.php:137
|
861 |
+
msgid "This section allows settings that apply to Registered Subscribers to be configured."
|
|
|
|
|
862 |
msgstr ""
|
863 |
|
864 |
#: classes/class-s2-admin.php:138
|
865 |
+
msgid "Categories can be made compulsory so emails are always sent to Public and Registered Subscribers for posts in these categories. They can also be excluded so that emails are not generated for Subscribers. Registered Subscribers can be allowed to bypass category exclusions. Excluded categories take precedence over Compulsory categories."
|
|
|
|
|
|
|
|
|
|
|
866 |
msgstr ""
|
867 |
|
868 |
#: classes/class-s2-admin.php:139
|
869 |
+
msgid "A set of default settings for new users can also be specified using the Auto Subscribe section. Settings specified here will be applied to any newly created user accounts while Subscribe2 is activated."
|
|
|
|
|
|
|
870 |
msgstr ""
|
871 |
|
872 |
#: classes/class-s2-admin.php:146
|
873 |
+
msgid "This section allows you to enable several aspect of the plugin such as Widgets and editor buttons."
|
|
|
|
|
874 |
msgstr ""
|
875 |
|
876 |
#: classes/class-s2-admin.php:147
|
877 |
+
msgid "AJAX mode can be enabled that is intended to work with the shortcode link parameter so that a dialog opens in the centre of the browser rather then using the regular form."
|
|
|
|
|
|
|
878 |
msgstr ""
|
879 |
|
880 |
#: classes/class-s2-admin.php:148
|
881 |
+
msgid "The email over ride check box can be set to be automatically checked for every new post and page from here to, this may be useful if you will only want to send very occasional notifications for specific posts. You can then uncheck this box just before you publish your content."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
882 |
msgstr ""
|
883 |
|
884 |
#: classes/class-s2-admin.php:155
|
885 |
+
msgid "This section contains a place to bar specified domains from becoming Public Subscribers and links to help and support pages."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
886 |
msgstr ""
|
887 |
|
888 |
+
#: classes/class-s2-admin.php:167
|
889 |
+
msgid "From this page you can send emails to the recipients in the group selected in the drop down."
|
|
|
|
|
890 |
msgstr ""
|
891 |
|
892 |
+
#: classes/class-s2-admin.php:168
|
893 |
+
msgid "<strong>Preview</strong> will send a preview of the email to the currently logged in user. <strong>Send</strong> will send the email to the recipient list."
|
|
|
|
|
894 |
msgstr ""
|
895 |
|
896 |
+
#: classes/class-s2-admin.php:226
|
897 |
+
msgid "You are about to delete a registered user account, any posts made by this user will be assigned to you. Are you sure?"
|
|
|
|
|
898 |
msgstr ""
|
899 |
|
900 |
+
#: classes/class-s2-admin.php:227
|
901 |
+
msgid "You are about to delete registered user accounts, any posts made by these users will be assigned to you. Are you sure?"
|
|
|
|
|
|
|
902 |
msgstr ""
|
903 |
|
904 |
+
#: classes/class-s2-admin.php:228
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
905 |
msgid "You are about to delete a public subscriber. Are you sure?"
|
906 |
msgstr ""
|
907 |
|
908 |
+
#: classes/class-s2-admin.php:229
|
909 |
msgid "You are about to delete public subscribers. Are you sure?"
|
910 |
msgstr ""
|
911 |
|
912 |
+
#: classes/class-s2-admin.php:230
|
913 |
+
msgid "You are about to make Bulk Management changes to all Registered Users. Are you sure?"
|
|
|
|
|
914 |
msgstr ""
|
915 |
|
916 |
+
#: classes/class-s2-admin.php:231
|
917 |
+
msgid "You are about to make Bulk Management changes to the selected Registered User. Are you sure?"
|
|
|
|
|
918 |
msgstr ""
|
919 |
|
920 |
+
#: classes/class-s2-admin.php:232
|
921 |
+
msgid "You are about to make Bulk Management changes to the selected Registered Users. Are you sure?"
|
|
|
|
|
922 |
msgstr ""
|
923 |
|
924 |
+
#: classes/class-s2-admin.php:354
|
|
|
|
|
|
|
|
|
925 |
msgid "Subscribe2 Notification Override"
|
926 |
msgstr ""
|
927 |
|
928 |
+
#: classes/class-s2-admin.php:367
|
929 |
+
#: gutenberg/gutenberg-translations.php:29
|
930 |
+
#: gutenberg/sidebar.js:176
|
931 |
msgid "Subscribe2 Preview"
|
932 |
msgstr ""
|
933 |
|
934 |
+
#: classes/class-s2-admin.php:381
|
935 |
+
#: gutenberg/gutenberg-translations.php:21
|
936 |
+
#: gutenberg/sidebar.js:92
|
937 |
msgid "Subscribe2 Resend"
|
938 |
msgstr ""
|
939 |
|
940 |
+
#: classes/class-s2-admin.php:401
|
941 |
+
#: gutenberg/gutenberg-translations.php:20
|
942 |
+
#: gutenberg/sidebar.js:70
|
943 |
msgid "Check here to disable sending of an email notification for this post/page"
|
944 |
msgstr ""
|
945 |
|
946 |
+
#: classes/class-s2-admin.php:438
|
947 |
+
#: gutenberg/gutenberg-translations.php:30
|
948 |
+
#: gutenberg/sidebar.js:185
|
949 |
msgid "Send preview email of this post to currently logged in user:"
|
950 |
msgstr ""
|
951 |
|
952 |
+
#: classes/class-s2-admin.php:439
|
953 |
+
#: gutenberg/gutenberg-translations.php:31
|
954 |
+
#: gutenberg/sidebar.js:197
|
955 |
msgid "Send Preview"
|
956 |
msgstr ""
|
957 |
|
958 |
+
#: classes/class-s2-admin.php:463
|
959 |
+
#: gutenberg/gutenberg-translations.php:22
|
960 |
+
#: gutenberg/sidebar.js:101
|
961 |
msgid "Resend the notification email of this post to current subscribers:"
|
962 |
msgstr ""
|
963 |
|
964 |
+
#: classes/class-s2-admin.php:464
|
965 |
+
#: gutenberg/gutenberg-translations.php:23
|
966 |
+
#: gutenberg/sidebar.js:113
|
967 |
msgid "Resend Notification"
|
968 |
msgstr ""
|
969 |
|
970 |
+
#: classes/class-s2-admin.php:551
|
971 |
+
msgctxt "Comma Separated Column Header names for CSV Export"
|
972 |
+
msgid "User Email,User Type,User Name,Confirm Date,IP"
|
973 |
+
msgstr ""
|
974 |
+
|
975 |
+
#: classes/class-s2-admin.php:572
|
976 |
msgid "Registered User"
|
977 |
msgstr ""
|
978 |
|
979 |
+
#: classes/class-s2-admin.php:577
|
980 |
msgid "Confirmed Public Subscriber"
|
981 |
msgstr ""
|
982 |
|
983 |
+
#: classes/class-s2-admin.php:579
|
984 |
msgid "Unconfirmed Public Subscriber"
|
985 |
msgstr ""
|
986 |
|
987 |
+
#: classes/class-s2-admin.php:596
|
988 |
+
#: classes/class-s2-forms.php:306
|
989 |
#: classes/class-s2-forms.php:366
|
990 |
msgid "Select / Unselect All"
|
991 |
msgstr ""
|
992 |
|
993 |
+
#: classes/class-s2-admin.php:633
|
994 |
msgid "All Users and Subscribers"
|
995 |
msgstr ""
|
996 |
|
997 |
+
#: classes/class-s2-admin.php:635
|
998 |
msgid "Confirmed"
|
999 |
msgstr ""
|
1000 |
|
1001 |
+
#: classes/class-s2-admin.php:636
|
1002 |
msgid "Unconfirmed"
|
1003 |
msgstr ""
|
1004 |
|
1005 |
+
#: classes/class-s2-admin.php:637
|
1006 |
msgid "All Registered Users"
|
1007 |
msgstr ""
|
1008 |
|
1009 |
+
#: classes/class-s2-admin.php:745
|
1010 |
msgid "Post Author"
|
1011 |
msgstr ""
|
1012 |
|
1013 |
+
#: classes/class-s2-admin.php:785
|
1014 |
+
msgid "The WordPress cron functions may be disabled on this server. Digest notifications may not work."
|
|
|
|
|
1015 |
msgstr ""
|
1016 |
|
1017 |
+
#: classes/class-s2-admin.php:794
|
1018 |
msgid "For each Post"
|
1019 |
msgstr ""
|
1020 |
|
1021 |
+
#: classes/class-s2-admin.php:816
|
1022 |
msgid "Current UTC time is"
|
1023 |
msgstr ""
|
1024 |
|
1025 |
+
#: classes/class-s2-admin.php:818
|
1026 |
msgid "Current blog time is"
|
1027 |
msgstr ""
|
1028 |
|
1029 |
+
#: classes/class-s2-admin.php:820
|
1030 |
msgid "Next email notification will be sent when your blog time is after"
|
1031 |
msgstr ""
|
1032 |
|
1033 |
+
#: classes/class-s2-admin.php:842
|
1034 |
msgid "Attempt to resend the last Digest Notification email"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
+
#: classes/class-s2-admin.php:843
|
1038 |
msgid "Resend Digest"
|
1039 |
msgstr ""
|
1040 |
|
1041 |
+
#: classes/class-s2-admin.php:860
|
1042 |
msgid "Select a page"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
+
#: classes/class-s2-admin.php:1131
|
1046 |
msgid "Email subscription"
|
1047 |
msgstr ""
|
1048 |
|
1049 |
+
#: classes/class-s2-admin.php:1133
|
1050 |
msgid "Subscribe / Unsubscribe"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
+
#: classes/class-s2-admin.php:1134
|
1054 |
msgid "Receive notifications"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
+
#: classes/class-s2-admin.php:1135
|
1058 |
msgid "Check if you want to receive email notification when new posts are published"
|
1059 |
msgstr ""
|
1060 |
|
1066 |
msgid "There was an error validating your request. Please try again later."
|
1067 |
msgstr ""
|
1068 |
|
1069 |
+
#: classes/class-s2-ajax.php:104
|
1070 |
+
#: classes/class-s2-ajax.php:134
|
1071 |
+
#: classes/class-s2-ajax.php:148
|
1072 |
+
#: classes/class-s2-frontend.php:24
|
1073 |
msgid "A confirmation message is on its way!"
|
1074 |
msgstr ""
|
1075 |
|
1076 |
+
#: classes/class-s2-ajax.php:112
|
1077 |
+
#: classes/class-s2-frontend.php:30
|
1078 |
msgid "Sorry, but that does not look like an email address to me."
|
1079 |
msgstr ""
|
1080 |
|
1081 |
+
#: classes/class-s2-ajax.php:114
|
1082 |
+
#: classes/class-s2-frontend.php:32
|
1083 |
+
msgid "Sorry, email addresses at that domain are currently barred due to spam, please use an alternative email address."
|
|
|
1084 |
msgstr ""
|
1085 |
|
1086 |
+
#: classes/class-s2-ajax.php:120
|
1087 |
+
#: classes/class-s2-frontend.php:188
|
1088 |
msgid "Slow down, you move too fast."
|
1089 |
msgstr ""
|
1090 |
|
|
|
1091 |
#. Translators: Link to login page
|
1092 |
+
#: classes/class-s2-ajax.php:126
|
1093 |
msgid "To manage your subscription options please <a href=\"%1$s\">login.</a>"
|
1094 |
msgstr ""
|
1095 |
|
1096 |
+
#: classes/class-s2-ajax.php:136
|
1097 |
+
#: classes/class-s2-ajax.php:150
|
1098 |
#: classes/class-s2-frontend.php:34
|
1099 |
msgid "Sorry, there seems to be an error on the server. Please try again later."
|
1100 |
msgstr ""
|
1101 |
|
1102 |
+
#: classes/class-s2-ajax.php:140
|
1103 |
+
#: classes/class-s2-frontend.php:26
|
1104 |
msgid "That email address is already subscribed."
|
1105 |
msgstr ""
|
1106 |
|
1107 |
+
#: classes/class-s2-ajax.php:144
|
1108 |
+
#: classes/class-s2-frontend.php:28
|
1109 |
msgid "That email address is not subscribed."
|
1110 |
msgstr ""
|
1111 |
|
1130 |
msgstr ""
|
1131 |
|
1132 |
#: classes/class-s2-core.php:1257
|
1133 |
+
msgid "By registering with this blog you are also agreeing to receive email notifications for new posts but you can unsubscribe at anytime"
|
|
|
|
|
1134 |
msgstr ""
|
1135 |
|
1136 |
#: classes/class-s2-core.php:1285
|
1141 |
msgid "Weekly"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
+
#: classes/class-s2-core.php:1622
|
1145 |
+
#: classes/class-s2-core.php:1623
|
1146 |
msgid "Author"
|
1147 |
msgstr ""
|
1148 |
|
1150 |
msgid "Posted on"
|
1151 |
msgstr ""
|
1152 |
|
1153 |
+
#: classes/class-s2-core.php:1656
|
1154 |
+
#: classes/class-s2-core.php:1657
|
1155 |
msgid "Posted in"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
+
#: classes/class-s2-core.php:1670
|
1159 |
+
#: classes/class-s2-core.php:1671
|
1160 |
msgid "Tagged as"
|
1161 |
msgstr ""
|
1162 |
|
1284 |
msgid "Disable Anti-spam measures"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
+
#: classes/class-s2-form-widget.php:182
|
1288 |
+
#: gutenberg/gutenberg-translations.php:17
|
1289 |
+
#: gutenberg/shortcode.js:365
|
1290 |
msgid "Disable wrapping of form buttons"
|
1291 |
msgstr ""
|
1292 |
|
1293 |
+
#: classes/class-s2-forms.php:17
|
1294 |
+
#: classes/class-s2-forms.php:21
|
1295 |
msgid "Permission error! Your request cannot be completed."
|
1296 |
msgstr ""
|
1297 |
|
1343 |
msgid "Subscribed Blogs"
|
1344 |
msgstr ""
|
1345 |
|
1346 |
+
#: classes/class-s2-forms.php:168
|
1347 |
+
#: classes/class-s2-forms.php:189
|
1348 |
msgid "Viewing Settings Now"
|
1349 |
msgstr ""
|
1350 |
|
1351 |
+
#: classes/class-s2-forms.php:172
|
1352 |
+
#: classes/class-s2-forms.php:193
|
1353 |
msgid "View Settings"
|
1354 |
msgstr ""
|
1355 |
|
1361 |
msgid "Subscription preferences updated."
|
1362 |
msgstr ""
|
1363 |
|
|
|
1364 |
#. Translators: Link to login page
|
1365 |
+
#: classes/class-s2-frontend.php:8
|
1366 |
msgid "To manage your subscription options please <a href=\"%1$s\">login</a>."
|
1367 |
msgstr ""
|
1368 |
|
|
|
1369 |
#. Translators: Link to Profile page
|
1370 |
+
#: classes/class-s2-frontend.php:12
|
1371 |
+
msgid "You may manage your subscription options from your <a href=\"%1$s\">profile</a>."
|
|
|
1372 |
msgstr ""
|
1373 |
|
|
|
1374 |
#. Translators: Link to Profile page
|
1375 |
+
#: classes/class-s2-frontend.php:20
|
1376 |
+
msgid "<a href=\"%1$s\">Subscribe</a> to email notifications when this blog posts new content."
|
|
|
1377 |
msgstr ""
|
1378 |
|
1379 |
#: classes/class-s2-frontend.php:37
|
1400 |
msgid "Enter email address..."
|
1401 |
msgstr ""
|
1402 |
|
1403 |
+
#: classes/class-s2-frontend.php:155
|
1404 |
+
#: classes/class-s2-frontend.php:157
|
1405 |
msgid "Your email:"
|
1406 |
msgstr ""
|
1407 |
|
1433 |
msgid "[Un]Subscribe to Posts"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
+
#: classes/class-s2-list-table.php:68
|
1437 |
+
msgctxt "column name"
|
1438 |
+
msgid "Email"
|
1439 |
+
msgstr ""
|
1440 |
+
|
1441 |
+
#: classes/class-s2-list-table.php:69
|
1442 |
+
msgctxt "column name"
|
1443 |
+
msgid "Date"
|
1444 |
+
msgstr ""
|
1445 |
+
|
1446 |
#: classes/class-s2-list-table.php:112
|
1447 |
msgid "Select All"
|
1448 |
msgstr ""
|
1449 |
|
1450 |
+
#: classes/class-s2-list-table.php:167
|
1451 |
+
#: classes/class-s2-list-table.php:172
|
|
|
1452 |
msgid "Delete"
|
1453 |
msgstr ""
|
1454 |
|
|
|
1455 |
#: classes/class-s2-list-table.php:173
|
1456 |
msgid "Toggle"
|
1457 |
msgstr ""
|
1458 |
|
|
|
1459 |
#: classes/class-s2-list-table.php:182
|
1460 |
msgid "No users were selected."
|
1461 |
msgstr ""
|
1462 |
|
|
|
1463 |
#: classes/class-s2-list-table.php:195
|
1464 |
msgid "Address(es) deleted!"
|
1465 |
msgstr ""
|
1466 |
|
|
|
1467 |
#: classes/class-s2-list-table.php:199
|
1468 |
msgid "Delete failed! You cannot delete some or all of these users."
|
1469 |
msgstr ""
|
1470 |
|
|
|
1471 |
#: classes/class-s2-list-table.php:202
|
1472 |
+
msgid "Registered user(s) deleted! Any posts made by these users were assigned to you."
|
|
|
|
|
1473 |
msgstr ""
|
1474 |
|
|
|
1475 |
#: classes/class-s2-list-table.php:226
|
1476 |
msgid "Status changed!"
|
1477 |
msgstr ""
|
1478 |
|
|
|
|
|
1479 |
#. Translators: Pagination
|
1480 |
+
#: classes/class-s2-list-table.php:247
|
1481 |
msgid "%s item"
|
1482 |
msgid_plural "%s items"
|
1483 |
msgstr[0] ""
|
1484 |
msgstr[1] ""
|
1485 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1486 |
#: classes/class-s2-list-table.php:308
|
1487 |
msgid "First page"
|
1488 |
msgstr ""
|
1491 |
msgid "Previous page"
|
1492 |
msgstr ""
|
1493 |
|
1494 |
+
#: classes/class-s2-list-table.php:326
|
1495 |
+
#: classes/class-s2-list-table.php:330
|
1496 |
msgid "Current Page"
|
1497 |
msgstr ""
|
1498 |
|
1499 |
+
#. Translators: Pagination
|
1500 |
+
#: classes/class-s2-list-table.php:338
|
1501 |
+
msgctxt "paging"
|
1502 |
+
msgid "%1$s of %2$s"
|
1503 |
+
msgstr ""
|
1504 |
+
|
1505 |
#: classes/class-s2-list-table.php:346
|
1506 |
msgid "Next page"
|
1507 |
msgstr ""
|
1511 |
msgstr ""
|
1512 |
|
1513 |
#: gutenberg/gutenberg-translations.php:5
|
1514 |
+
#: gutenberg/shortcode.js:112
|
1515 |
msgid "Subscribe2 HTML"
|
1516 |
msgstr ""
|
1517 |
|
1518 |
#: gutenberg/gutenberg-translations.php:6
|
1519 |
+
#: gutenberg/shortcode.js:116
|
1520 |
msgid "email"
|
1521 |
msgstr ""
|
1522 |
|
1523 |
#: gutenberg/gutenberg-translations.php:7
|
1524 |
+
#: gutenberg/shortcode.js:117
|
1525 |
msgid "notification"
|
1526 |
msgstr ""
|
1527 |
|
1528 |
#: gutenberg/gutenberg-translations.php:8
|
1529 |
+
#: gutenberg/shortcode.js:314
|
1530 |
msgid "Subscribe2 Shortcode Parameters"
|
1531 |
msgstr ""
|
1532 |
|
1533 |
#: gutenberg/gutenberg-translations.php:9
|
1534 |
+
#: gutenberg/shortcode.js:318
|
1535 |
msgid "Button Display Options"
|
1536 |
msgstr ""
|
1537 |
|
1538 |
#: gutenberg/gutenberg-translations.php:10
|
1539 |
+
#: gutenberg/shortcode.js:322
|
1540 |
msgid "Show Both Buttons"
|
1541 |
msgstr ""
|
1542 |
|
1543 |
#: gutenberg/gutenberg-translations.php:11
|
1544 |
+
#: gutenberg/shortcode.js:323
|
1545 |
msgid "Hide Subscribe Button"
|
1546 |
msgstr ""
|
1547 |
|
1548 |
#: gutenberg/gutenberg-translations.php:12
|
1549 |
+
#: gutenberg/shortcode.js:324
|
1550 |
msgid "Hide Unsubscribe Button"
|
1551 |
msgstr ""
|
1552 |
|
1553 |
#: gutenberg/gutenberg-translations.php:13
|
1554 |
+
#: gutenberg/shortcode.js:332
|
1555 |
msgid "Page ID"
|
1556 |
msgstr ""
|
1557 |
|
1558 |
#: gutenberg/gutenberg-translations.php:14
|
1559 |
+
#: gutenberg/shortcode.js:340
|
1560 |
msgid "Disable Javascript"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
#: gutenberg/gutenberg-translations.php:15
|
1564 |
+
#: gutenberg/shortcode.js:348
|
1565 |
msgid "Disable Simple Anti-Spam Measures"
|
1566 |
msgstr ""
|
1567 |
|
1568 |
#: gutenberg/gutenberg-translations.php:16
|
1569 |
+
#: gutenberg/shortcode.js:357
|
1570 |
msgid "Textbox size"
|
1571 |
msgstr ""
|
1572 |
|
1573 |
#: gutenberg/gutenberg-translations.php:18
|
1574 |
+
#: gutenberg/shortcode.js:374
|
1575 |
msgid "Link Text"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
#: gutenberg/gutenberg-translations.php:19
|
1579 |
+
#: gutenberg/shortcode.js:386
|
1580 |
msgid "Subscribe2 HTML Shortcode"
|
1581 |
msgstr ""
|
1582 |
|
1583 |
#: gutenberg/gutenberg-translations.php:24
|
1584 |
+
#: gutenberg/sidebar.js:123
|
1585 |
msgid "Attempt made to send email preview"
|
1586 |
msgstr ""
|
1587 |
|
1588 |
#: gutenberg/gutenberg-translations.php:25
|
1589 |
+
#: gutenberg/sidebar.js:130
|
1590 |
msgid "Attempt made to resend email notification"
|
1591 |
msgstr ""
|
1592 |
|
1593 |
#: gutenberg/gutenberg-translations.php:26
|
1594 |
#: gutenberg/gutenberg-translations.php:27
|
1595 |
+
#: gutenberg/sidebar.js:143
|
1596 |
+
#: gutenberg/sidebar.js:149
|
1597 |
msgid "Subscribe2 Sidebar"
|
1598 |
msgstr ""
|
1599 |
|
1600 |
#: gutenberg/gutenberg-translations.php:28
|
1601 |
+
#: gutenberg/sidebar.js:159
|
1602 |
msgid "Subscribe2 Override"
|
1603 |
msgstr ""
|
1604 |
|
1611 |
"You may view the latest post at\n"
|
1612 |
"{PERMALINK}\n"
|
1613 |
"\n"
|
1614 |
+
"You received this e-mail because you asked to be notified when new updates are posted.\n"
|
|
|
1615 |
"Best regards,\n"
|
1616 |
"{MYNAME}\n"
|
1617 |
"{EMAIL}"
|
1619 |
|
1620 |
#: include/options.php:148
|
1621 |
msgid ""
|
1622 |
+
"{BLOGNAME} has received a request to {ACTION} for this email address. To complete your request please click on the link below:\n"
|
|
|
1623 |
"\n"
|
1624 |
"{LINK}\n"
|
1625 |
"\n"
|
1635 |
|
1636 |
#: include/options.php:156
|
1637 |
msgid ""
|
1638 |
+
"This email address was subscribed for notifications at {BLOGNAME} ({BLOGLINK}) but the subscription remains incomplete.\n"
|
|
|
1639 |
"\n"
|
1640 |
"If you wish to complete your subscription please click on the link below:\n"
|
1641 |
"\n"
|
1642 |
"{LINK}\n"
|
1643 |
"\n"
|
1644 |
+
"If you do not wish to complete your subscription please ignore this email and your address will be removed from our database.\n"
|
|
|
1645 |
"\n"
|
1646 |
"Regards,\n"
|
1647 |
"{MYNAME}"
|
1655 |
msgid "I'm just a plugin, please don't call me directly"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
+
#. Translators: Subscribe2 needs WordPress 4.4 or above, exit if not on a compatible version
|
1659 |
#: subscribe2.php:39
|
1660 |
+
msgid "This version of Subscribe2 requires WordPress 4.4 or greater. Please update %1$s or use an older version of %2$s."
|
|
|
|
|
|
|
|
|
1661 |
msgstr ""
|
1662 |
|
1663 |
#: subscribe2.php:51
|
1664 |
+
msgid "Subscribe2 HTML cannot be activated as a network plugin. Please activate it on a site level"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1665 |
msgstr ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|