Version Description
- 2018-03-13 =
- Improved: email validation for WordPress user synchronization;
- Fixed: import no longer discards e-mails with dashes. A big thank-you to everyone who reported the issue;
- Fixed: sending does not get stuck on the last step of the newsletter creation process. Thanks, Ren!
Download this release
Release Info
Developer | wysija |
Plugin | MailPoet Newsletters (New) |
Version | 3.5.1 |
Comparing to | |
See all releases |
Code changes from version 3.5.0 to 3.5.1
- assets/js/{admin.7f9ea640.js → admin.e01d2225.js} +22 -10
- assets/js/{admin_vendor.b56c5496.js → admin_vendor.73a171d4.js} +1 -1
- assets/js/lib/mailpoet_shortcodes/plugin.js +16 -18
- assets/js/manifest.json +3 -3
- assets/js/{vendor.79f8bb9d.js → vendor.98a3aa8c.js} +1 -1
- lang/mailpoet-ca.mo +0 -0
- lang/mailpoet-da_DK.mo +0 -0
- lang/mailpoet-de_DE.mo +0 -0
- lang/mailpoet-en_GB.mo +0 -0
- lang/mailpoet-es_ES.mo +0 -0
- lang/mailpoet-fa_IR.mo +0 -0
- lang/mailpoet-fr_CA.mo +0 -0
- lang/mailpoet-fr_FR.mo +0 -0
- lang/mailpoet-it_IT.mo +0 -0
- lang/mailpoet-ja.mo +0 -0
- lang/mailpoet-nl_NL.mo +0 -0
- lang/mailpoet-pl_PL.mo +0 -0
- lang/mailpoet-pt_BR.mo +0 -0
- lang/mailpoet-pt_PT.mo +0 -0
- lang/mailpoet-ru_RU.mo +0 -0
- lang/mailpoet-sq.mo +0 -0
- lang/mailpoet-sv_SE.mo +0 -0
- lang/mailpoet-tr_TR.mo +0 -0
- lang/mailpoet.pot +95 -55
- lib/Config/Menu.php +3 -0
- lib/Config/Migrator.php +2 -1
- lib/Cron/Workers/SendingQueue/SendingQueue.php +3 -1
- lib/Models/ModelValidator.php +1 -1
- lib/Newsletter/Url.php +1 -1
- lib/Segments/WP.php +37 -5
- lib/Subscribers/ImportExport/Import/Import.php +4 -2
- mailpoet.php +2 -2
- readme.txt +6 -1
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +5 -5
- views/layout.html +2 -0
- views/settings.html +11 -0
- views/subscribers/importExport/import.html +1 -3
- views/update.html +35 -1
assets/js/{admin.7f9ea640.js → admin.e01d2225.js}
RENAMED
@@ -11622,7 +11622,10 @@ webpackJsonp([0],[
|
|
11622 |
}, {
|
11623 |
name: 'reply_to_address',
|
11624 |
type: 'text',
|
11625 |
-
placeholder: MailPoet.I18n.t('replyToAddressPlaceholder')
|
|
|
|
|
|
|
11626 |
}]
|
11627 |
}];
|
11628 |
|
@@ -12131,7 +12134,10 @@ webpackJsonp([0],[
|
|
12131 |
}, {
|
12132 |
name: 'reply_to_address',
|
12133 |
type: 'text',
|
12134 |
-
placeholder: MailPoet.I18n.t('replyToAddressPlaceholder')
|
|
|
|
|
|
|
12135 |
}]
|
12136 |
}, {
|
12137 |
name: 'options',
|
@@ -12216,7 +12222,10 @@ webpackJsonp([0],[
|
|
12216 |
}, {
|
12217 |
name: 'reply_to_address',
|
12218 |
type: 'text',
|
12219 |
-
placeholder: MailPoet.I18n.t('replyToAddressPlaceholder')
|
|
|
|
|
|
|
12220 |
}]
|
12221 |
}];
|
12222 |
|
@@ -22042,8 +22051,9 @@ webpackJsonp([0],[
|
|
22042 |
// is the email in 'mailto:email' format?
|
22043 |
email = test[1].trim();
|
22044 |
}
|
22045 |
-
|
22046 |
-
|
|
|
22047 |
return false;
|
22048 |
}
|
22049 |
return email;
|
@@ -22087,7 +22097,7 @@ webpackJsonp([0],[
|
|
22087 |
for (column in rowData) {
|
22088 |
emailAddress = detectAndCleanupEmail(rowData[column]);
|
22089 |
if (emailColumnPosition === null
|
22090 |
-
&& window.
|
22091 |
emailColumnPosition = column;
|
22092 |
// add current e-mail to an object index
|
22093 |
parsedEmails[emailAddress] = true;
|
@@ -22107,7 +22117,7 @@ webpackJsonp([0],[
|
|
22107 |
if (_.has(parsedEmails, email)) {
|
22108 |
duplicateEmails.push(email);
|
22109 |
}
|
22110 |
-
else if (!window.
|
22111 |
invalidEmails.push(rowData[emailColumnPosition]);
|
22112 |
}
|
22113 |
// if we haven't yet processed this e-mail and it passed
|
@@ -22135,7 +22145,7 @@ webpackJsonp([0],[
|
|
22135 |
// since we assume that the header line is always present, we need
|
22136 |
// to detect the header by checking if it contains a valid e-mail address
|
22137 |
window.importData.step1 = {
|
22138 |
-
header: (!window.
|
22139 |
processedSubscribers[0][emailColumnPosition])
|
22140 |
) ? processedSubscribers.shift() : null,
|
22141 |
subscribers: processedSubscribers,
|
@@ -22568,7 +22578,7 @@ webpackJsonp([0],[
|
|
22568 |
columnData = helperSubscribers.subscribers[0][i];
|
22569 |
columnId = 'ignore'; // set default column type
|
22570 |
// if the column is not undefined and has a valid e-mail, set type as email
|
22571 |
-
if (columnData % 1 !== 0 && window.
|
22572 |
columnId = 'email';
|
22573 |
} else if (helperSubscribers.header) {
|
22574 |
headerName = helperSubscribers.header[i];
|
@@ -22669,7 +22679,9 @@ webpackJsonp([0],[
|
|
22669 |
// EMAIL filter: if the first value in the column doesn't have a valid
|
22670 |
// email, hide the next button
|
22671 |
if (column.id === 'email') {
|
22672 |
-
if (!window.
|
|
|
|
|
22673 |
preventNextStep = true;
|
22674 |
if (!jQuery('[data-id="notice_invalidEmail"]').length) {
|
22675 |
MailPoet.Notice.error(MailPoet.I18n.t('columnContainsInvalidElement'), {
|
11622 |
}, {
|
11623 |
name: 'reply_to_address',
|
11624 |
type: 'text',
|
11625 |
+
placeholder: MailPoet.I18n.t('replyToAddressPlaceholder'),
|
11626 |
+
validation: {
|
11627 |
+
'data-parsley-type': 'email'
|
11628 |
+
}
|
11629 |
}]
|
11630 |
}];
|
11631 |
|
12134 |
}, {
|
12135 |
name: 'reply_to_address',
|
12136 |
type: 'text',
|
12137 |
+
placeholder: MailPoet.I18n.t('replyToAddressPlaceholder'),
|
12138 |
+
validation: {
|
12139 |
+
'data-parsley-type': 'email'
|
12140 |
+
}
|
12141 |
}]
|
12142 |
}, {
|
12143 |
name: 'options',
|
12222 |
}, {
|
12223 |
name: 'reply_to_address',
|
12224 |
type: 'text',
|
12225 |
+
placeholder: MailPoet.I18n.t('replyToAddressPlaceholder'),
|
12226 |
+
validation: {
|
12227 |
+
'data-parsley-type': 'email'
|
12228 |
+
}
|
12229 |
}]
|
12230 |
}];
|
12231 |
|
22051 |
// is the email in 'mailto:email' format?
|
22052 |
email = test[1].trim();
|
22053 |
}
|
22054 |
+
|
22055 |
+
// validate email
|
22056 |
+
if (!window.mailpoet_email_regex.test(email)) {
|
22057 |
return false;
|
22058 |
}
|
22059 |
return email;
|
22097 |
for (column in rowData) {
|
22098 |
emailAddress = detectAndCleanupEmail(rowData[column]);
|
22099 |
if (emailColumnPosition === null
|
22100 |
+
&& window.mailpoet_email_regex.test(emailAddress)) {
|
22101 |
emailColumnPosition = column;
|
22102 |
// add current e-mail to an object index
|
22103 |
parsedEmails[emailAddress] = true;
|
22117 |
if (_.has(parsedEmails, email)) {
|
22118 |
duplicateEmails.push(email);
|
22119 |
}
|
22120 |
+
else if (!window.mailpoet_email_regex.test(email)) {
|
22121 |
invalidEmails.push(rowData[emailColumnPosition]);
|
22122 |
}
|
22123 |
// if we haven't yet processed this e-mail and it passed
|
22145 |
// since we assume that the header line is always present, we need
|
22146 |
// to detect the header by checking if it contains a valid e-mail address
|
22147 |
window.importData.step1 = {
|
22148 |
+
header: (!window.mailpoet_email_regex.test(
|
22149 |
processedSubscribers[0][emailColumnPosition])
|
22150 |
) ? processedSubscribers.shift() : null,
|
22151 |
subscribers: processedSubscribers,
|
22578 |
columnData = helperSubscribers.subscribers[0][i];
|
22579 |
columnId = 'ignore'; // set default column type
|
22580 |
// if the column is not undefined and has a valid e-mail, set type as email
|
22581 |
+
if (columnData % 1 !== 0 && window.mailpoet_email_regex.test(columnData)) {
|
22582 |
columnId = 'email';
|
22583 |
} else if (helperSubscribers.header) {
|
22584 |
headerName = helperSubscribers.header[i];
|
22679 |
// EMAIL filter: if the first value in the column doesn't have a valid
|
22680 |
// email, hide the next button
|
22681 |
if (column.id === 'email') {
|
22682 |
+
if (!window.mailpoet_email_regex.test(
|
22683 |
+
subscribersClone.subscribers[0][matchedColumn.index])
|
22684 |
+
) {
|
22685 |
preventNextStep = true;
|
22686 |
if (!jQuery('[data-id="notice_invalidEmail"]').length) {
|
22687 |
MailPoet.Notice.error(MailPoet.I18n.t('columnContainsInvalidElement'), {
|
assets/js/{admin_vendor.b56c5496.js → admin_vendor.73a171d4.js}
RENAMED
@@ -40486,7 +40486,7 @@ webpackJsonp([1],[
|
|
40486 |
_extends({
|
40487 |
name: this.props.field.name,
|
40488 |
id: 'field_' + this.props.field.name,
|
40489 |
-
value: this.props.item[this.props.field.name],
|
40490 |
onChange: this.props.onValueChange
|
40491 |
}, this.props.field.validation),
|
40492 |
placeholder,
|
40486 |
_extends({
|
40487 |
name: this.props.field.name,
|
40488 |
id: 'field_' + this.props.field.name,
|
40489 |
+
value: this.props.item[this.props.field.name] || '',
|
40490 |
onChange: this.props.onValueChange
|
40491 |
}, this.props.field.validation),
|
40492 |
placeholder,
|
assets/js/lib/mailpoet_shortcodes/plugin.js
CHANGED
@@ -8,35 +8,33 @@
|
|
8 |
* its placeholder into editor text.
|
9 |
*/
|
10 |
|
11 |
-
/*
|
12 |
-
/*
|
13 |
-
tinymce.PluginManager.add('mailpoet_shortcodes', function
|
14 |
-
var appendLabelAndClose = function
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
21 |
};
|
22 |
-
};
|
23 |
|
24 |
editor.addButton('mailpoet_shortcodes', {
|
25 |
icon: 'mailpoet_shortcodes',
|
26 |
-
onclick: function
|
27 |
-
var shortcodes = []
|
28 |
-
|
29 |
-
var segment;
|
30 |
-
var i;
|
31 |
|
32 |
-
for (segment in configShortcodes) {
|
33 |
if (configShortcodes.hasOwnProperty(segment)) {
|
34 |
shortcodes.push({
|
35 |
type: 'label',
|
36 |
text: segment
|
37 |
});
|
38 |
|
39 |
-
for (i = 0; i < configShortcodes[segment].length; i += 1) {
|
40 |
shortcodes.push({
|
41 |
type: 'button',
|
42 |
text: configShortcodes[segment][i].text,
|
8 |
* its placeholder into editor text.
|
9 |
*/
|
10 |
|
11 |
+
/*jshint unused:false */
|
12 |
+
/*global tinymce:true */
|
13 |
+
tinymce.PluginManager.add('mailpoet_shortcodes', function(editor, url) {
|
14 |
+
var appendLabelAndClose = function(shortcode) {
|
15 |
+
editor.insertContent(shortcode);
|
16 |
+
editor.windowManager.close();
|
17 |
+
},
|
18 |
+
generateOnClickFunc = function(shortcode) {
|
19 |
+
return function() {
|
20 |
+
appendLabelAndClose(shortcode);
|
21 |
+
};
|
22 |
};
|
|
|
23 |
|
24 |
editor.addButton('mailpoet_shortcodes', {
|
25 |
icon: 'mailpoet_shortcodes',
|
26 |
+
onclick: function() {
|
27 |
+
var shortcodes = [],
|
28 |
+
configShortcodes = editor.settings.mailpoet_shortcodes;
|
|
|
|
|
29 |
|
30 |
+
for (var segment in configShortcodes) {
|
31 |
if (configShortcodes.hasOwnProperty(segment)) {
|
32 |
shortcodes.push({
|
33 |
type: 'label',
|
34 |
text: segment
|
35 |
});
|
36 |
|
37 |
+
for (var i = 0; i < configShortcodes[segment].length; i += 1) {
|
38 |
shortcodes.push({
|
39 |
type: 'button',
|
40 |
text: configShortcodes[segment][i].text,
|
assets/js/manifest.json
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
{
|
2 |
"mp2migrator.js": "mp2migrator.d90426c2.js",
|
3 |
"public.js": "public.ec1bce32.js",
|
4 |
-
"admin.js": "admin.
|
5 |
-
"admin_vendor.js": "admin_vendor.
|
6 |
"form_editor.js": "form_editor.20737db0.js",
|
7 |
"mailpoet.js": "mailpoet.4267d9a6.js",
|
8 |
"newsletter_editor.js": "newsletter_editor.fd18ee48.js",
|
9 |
-
"vendor.js": "vendor.
|
10 |
}
|
1 |
{
|
2 |
"mp2migrator.js": "mp2migrator.d90426c2.js",
|
3 |
"public.js": "public.ec1bce32.js",
|
4 |
+
"admin.js": "admin.e01d2225.js",
|
5 |
+
"admin_vendor.js": "admin_vendor.73a171d4.js",
|
6 |
"form_editor.js": "form_editor.20737db0.js",
|
7 |
"mailpoet.js": "mailpoet.4267d9a6.js",
|
8 |
"newsletter_editor.js": "newsletter_editor.fd18ee48.js",
|
9 |
+
"vendor.js": "vendor.98a3aa8c.js"
|
10 |
}
|
assets/js/{vendor.79f8bb9d.js → vendor.98a3aa8c.js}
RENAMED
@@ -76,7 +76,7 @@
|
|
76 |
/******/ script.charset = 'utf-8';
|
77 |
/******/ script.async = true;
|
78 |
|
79 |
-
/******/ script.src = __webpack_require__.p + "" + ({"0":"admin","1":"admin_vendor","2":"form_editor","3":"mailpoet","4":"newsletter_editor"}[chunkId]||chunkId) + "." + {"0":"
|
80 |
/******/ head.appendChild(script);
|
81 |
/******/ }
|
82 |
/******/ };
|
76 |
/******/ script.charset = 'utf-8';
|
77 |
/******/ script.async = true;
|
78 |
|
79 |
+
/******/ script.src = __webpack_require__.p + "" + ({"0":"admin","1":"admin_vendor","2":"form_editor","3":"mailpoet","4":"newsletter_editor"}[chunkId]||chunkId) + "." + {"0":"e01d2225","1":"73a171d4","2":"20737db0","3":"4267d9a6","4":"fd18ee48"}[chunkId] + ".chunk.js";
|
80 |
/******/ head.appendChild(script);
|
81 |
/******/ }
|
82 |
/******/ };
|
lang/mailpoet-ca.mo
CHANGED
Binary file
|
lang/mailpoet-da_DK.mo
CHANGED
Binary file
|
lang/mailpoet-de_DE.mo
CHANGED
Binary file
|
lang/mailpoet-en_GB.mo
ADDED
Binary file
|
lang/mailpoet-es_ES.mo
CHANGED
Binary file
|
lang/mailpoet-fa_IR.mo
CHANGED
Binary file
|
lang/mailpoet-fr_CA.mo
CHANGED
Binary file
|
lang/mailpoet-fr_FR.mo
CHANGED
Binary file
|
lang/mailpoet-it_IT.mo
CHANGED
Binary file
|
lang/mailpoet-ja.mo
CHANGED
Binary file
|
lang/mailpoet-nl_NL.mo
CHANGED
Binary file
|
lang/mailpoet-pl_PL.mo
CHANGED
Binary file
|
lang/mailpoet-pt_BR.mo
CHANGED
Binary file
|
lang/mailpoet-pt_PT.mo
CHANGED
Binary file
|
lang/mailpoet-ru_RU.mo
CHANGED
Binary file
|
lang/mailpoet-sq.mo
CHANGED
Binary file
|
lang/mailpoet-sv_SE.mo
CHANGED
Binary file
|
lang/mailpoet-tr_TR.mo
CHANGED
Binary file
|
lang/mailpoet.pot
CHANGED
@@ -4,7 +4,7 @@ msgid ""
|
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: \n"
|
6 |
"Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
|
7 |
-
"POT-Creation-Date: 2018-03-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -299,7 +299,7 @@ msgstr ""
|
|
299 |
msgid "Manage segments"
|
300 |
msgstr ""
|
301 |
|
302 |
-
#: lib/Config/Capabilities.php:67 lib/Config/Menu.php:
|
303 |
msgid "MailPoet"
|
304 |
msgstr ""
|
305 |
|
@@ -473,7 +473,7 @@ msgstr ""
|
|
473 |
msgid "Migration"
|
474 |
msgstr ""
|
475 |
|
476 |
-
#: lib/Config/Menu.php:
|
477 |
msgid "In any WordPress role"
|
478 |
msgstr ""
|
479 |
|
@@ -1169,62 +1169,62 @@ msgid "Month (January, February,...)"
|
|
1169 |
msgstr ""
|
1170 |
|
1171 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:197
|
1172 |
-
#: views/subscribers/importExport/import.html:
|
1173 |
msgid "January"
|
1174 |
msgstr ""
|
1175 |
|
1176 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:198
|
1177 |
-
#: views/subscribers/importExport/import.html:
|
1178 |
msgid "February"
|
1179 |
msgstr ""
|
1180 |
|
1181 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:199
|
1182 |
-
#: views/subscribers/importExport/import.html:
|
1183 |
msgid "March"
|
1184 |
msgstr ""
|
1185 |
|
1186 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:200
|
1187 |
-
#: views/subscribers/importExport/import.html:
|
1188 |
msgid "April"
|
1189 |
msgstr ""
|
1190 |
|
1191 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:201
|
1192 |
-
#: views/newsletters.html:213 views/subscribers/importExport/import.html:
|
1193 |
msgid "May"
|
1194 |
msgstr ""
|
1195 |
|
1196 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:202
|
1197 |
-
#: views/subscribers/importExport/import.html:
|
1198 |
msgid "June"
|
1199 |
msgstr ""
|
1200 |
|
1201 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:203
|
1202 |
-
#: views/subscribers/importExport/import.html:
|
1203 |
msgid "July"
|
1204 |
msgstr ""
|
1205 |
|
1206 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:204
|
1207 |
-
#: views/subscribers/importExport/import.html:
|
1208 |
msgid "August"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:205
|
1212 |
-
#: views/subscribers/importExport/import.html:
|
1213 |
msgid "September"
|
1214 |
msgstr ""
|
1215 |
|
1216 |
#: lib/Form/Block/Date.php:126 views/newsletters.html:206
|
1217 |
-
#: views/subscribers/importExport/import.html:
|
1218 |
msgid "October"
|
1219 |
msgstr ""
|
1220 |
|
1221 |
#: lib/Form/Block/Date.php:126 views/newsletters.html:207
|
1222 |
-
#: views/subscribers/importExport/import.html:
|
1223 |
msgid "November"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
#: lib/Form/Block/Date.php:126 views/newsletters.html:208
|
1227 |
-
#: views/subscribers/importExport/import.html:
|
1228 |
msgid "December"
|
1229 |
msgstr ""
|
1230 |
|
@@ -1584,15 +1584,15 @@ msgstr ""
|
|
1584 |
msgid "Not In Segment"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
-
#: lib/Subscribers/ImportExport/Import/Import.php:
|
1588 |
msgid "Missing or invalid import data."
|
1589 |
msgstr ""
|
1590 |
|
1591 |
-
#: lib/Subscribers/ImportExport/Import/Import.php:
|
1592 |
msgid "No valid subscribers were found."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
-
#: lib/Subscribers/ImportExport/Import/Import.php:
|
1596 |
msgid "Unable to save imported subscribers."
|
1597 |
msgstr ""
|
1598 |
|
@@ -1655,7 +1655,7 @@ msgid "System fields"
|
|
1655 |
msgstr ""
|
1656 |
|
1657 |
#: lib/Subscribers/ImportExport/ImportExportFactory.php:112
|
1658 |
-
#: views/subscribers/importExport/import.html:
|
1659 |
msgid "User fields"
|
1660 |
msgstr ""
|
1661 |
|
@@ -1894,7 +1894,7 @@ msgstr ""
|
|
1894 |
msgid "Saved! Add this form to %1$sa widget%2$s."
|
1895 |
msgstr ""
|
1896 |
|
1897 |
-
#: views/form/editor.html:587 views/subscribers/importExport/import.html:
|
1898 |
msgid "Add new field"
|
1899 |
msgstr ""
|
1900 |
|
@@ -1923,7 +1923,7 @@ msgid "Edit display"
|
|
1923 |
msgstr ""
|
1924 |
|
1925 |
#: views/form/templates/blocks/segment.hbs:2
|
1926 |
-
#: views/subscribers/importExport/import.html:
|
1927 |
msgid "Please select at least one list"
|
1928 |
msgstr ""
|
1929 |
|
@@ -2373,13 +2373,13 @@ msgstr ""
|
|
2373 |
msgid "Visit MailPoet.com to purchase a key"
|
2374 |
msgstr ""
|
2375 |
|
2376 |
-
#: views/layout.html:
|
2377 |
msgid ""
|
2378 |
"An error has happened while performing a request, the server has responded "
|
2379 |
"with response code %d"
|
2380 |
msgstr ""
|
2381 |
|
2382 |
-
#: views/layout.html:
|
2383 |
msgid ""
|
2384 |
"Want to give feedback to the MailPoet team? Contact us here. Please provide "
|
2385 |
"as much information as possible!"
|
@@ -3281,7 +3281,7 @@ msgid "%d emails were permanently deleted."
|
|
3281 |
msgstr ""
|
3282 |
|
3283 |
#: views/newsletters.html:47 views/subscribers/importExport/import/step2.html:8
|
3284 |
-
#: views/subscribers/importExport/import.html:
|
3285 |
#: views/subscribers/subscribers.html:40
|
3286 |
msgid "Show more details"
|
3287 |
msgstr ""
|
@@ -4925,11 +4925,15 @@ msgstr ""
|
|
4925 |
msgid "Save settings"
|
4926 |
msgstr ""
|
4927 |
|
4928 |
-
#: views/settings.html:
|
|
|
|
|
|
|
|
|
4929 |
msgid "Settings saved"
|
4930 |
msgstr ""
|
4931 |
|
4932 |
-
#: views/settings.html:
|
4933 |
msgid ""
|
4934 |
"Are you sure? All of your MailPoet data will be permanently erased "
|
4935 |
"(newsletters, statistics, subscribers, etc.)."
|
@@ -4973,7 +4977,7 @@ msgid "Excel file"
|
|
4973 |
msgstr ""
|
4974 |
|
4975 |
#: views/subscribers/importExport/export.html:105
|
4976 |
-
#: views/subscribers/importExport/import.html:
|
4977 |
msgid "Server error:"
|
4978 |
msgstr ""
|
4979 |
|
@@ -5077,118 +5081,118 @@ msgid ""
|
|
5077 |
"Look at some [link]examples on our support site[/link]."
|
5078 |
msgstr ""
|
5079 |
|
5080 |
-
#: views/subscribers/importExport/import.html:
|
5081 |
msgid "No active lists found"
|
5082 |
msgstr ""
|
5083 |
|
5084 |
-
#: views/subscribers/importExport/import.html:
|
5085 |
msgid "Select"
|
5086 |
msgstr ""
|
5087 |
|
5088 |
-
#: views/subscribers/importExport/import.html:
|
5089 |
msgid "Only comma-separated (CSV) file formats are supported."
|
5090 |
msgstr ""
|
5091 |
|
5092 |
-
#: views/subscribers/importExport/import.html:
|
5093 |
msgid ""
|
5094 |
"Your CSV is over %s and is too big to process. Please split the file into "
|
5095 |
"two or more sections."
|
5096 |
msgstr ""
|
5097 |
|
5098 |
-
#: views/subscribers/importExport/import.html:
|
5099 |
msgid ""
|
5100 |
"Your data could not be processed. Please make sure it is in the correct "
|
5101 |
"format."
|
5102 |
msgstr ""
|
5103 |
|
5104 |
-
#: views/subscribers/importExport/import.html:
|
5105 |
msgid ""
|
5106 |
"No valid records were found. This file needs to be formatted in a CSV style "
|
5107 |
"(comma-separated). Look at some [link]examples on our support site.[/link]"
|
5108 |
msgstr ""
|
5109 |
|
5110 |
-
#: views/subscribers/importExport/import.html:
|
5111 |
msgid "%1$s records had issues and were skipped."
|
5112 |
msgstr ""
|
5113 |
|
5114 |
-
#: views/subscribers/importExport/import.html:
|
5115 |
msgid "%1$s emails are not valid: %2$s"
|
5116 |
msgstr ""
|
5117 |
|
5118 |
-
#: views/subscribers/importExport/import.html:
|
5119 |
msgid "%1$s emails appear more than once in your file: %2$s"
|
5120 |
msgstr ""
|
5121 |
|
5122 |
-
#: views/subscribers/importExport/import.html:
|
5123 |
msgid "Hide details"
|
5124 |
msgstr ""
|
5125 |
|
|
|
5126 |
#: views/subscribers/importExport/import.html:49
|
5127 |
-
#: views/subscribers/importExport/import.html:51
|
5128 |
msgid "Add new list"
|
5129 |
msgstr ""
|
5130 |
|
5131 |
-
#: views/subscribers/importExport/import.html:
|
5132 |
msgid "The selected value is already matched to another field."
|
5133 |
msgstr ""
|
5134 |
|
5135 |
-
#: views/subscribers/importExport/import.html:
|
5136 |
msgid "Confirm that this field corresponds to the selected field."
|
5137 |
msgstr ""
|
5138 |
|
5139 |
-
#: views/subscribers/importExport/import.html:
|
5140 |
msgid ""
|
5141 |
"One of the fields contains an invalid email. Please fix it before "
|
5142 |
"continuing."
|
5143 |
msgstr ""
|
5144 |
|
5145 |
-
#: views/subscribers/importExport/import.html:
|
5146 |
msgid ""
|
5147 |
"Do not match as a 'date field' if most of the rows for that field return "
|
5148 |
"the same error."
|
5149 |
msgstr ""
|
5150 |
|
5151 |
-
#: views/subscribers/importExport/import.html:
|
5152 |
msgid "First row date cannot be empty."
|
5153 |
msgstr ""
|
5154 |
|
5155 |
-
#: views/subscribers/importExport/import.html:
|
5156 |
msgid "Verify that the date in blue matches the original date."
|
5157 |
msgstr ""
|
5158 |
|
5159 |
-
#: views/subscribers/importExport/import.html:
|
5160 |
msgid "PM"
|
5161 |
msgstr ""
|
5162 |
|
5163 |
-
#: views/subscribers/importExport/import.html:
|
5164 |
msgid "AM"
|
5165 |
msgstr ""
|
5166 |
|
5167 |
-
#: views/subscribers/importExport/import.html:
|
5168 |
msgid "Error matching date"
|
5169 |
msgstr ""
|
5170 |
|
5171 |
-
#: views/subscribers/importExport/import.html:
|
5172 |
msgid "One of the fields contains an invalid date. Please fix before continuing."
|
5173 |
msgstr ""
|
5174 |
|
5175 |
-
#: views/subscribers/importExport/import.html:
|
5176 |
msgid "Error adding a new list:"
|
5177 |
msgstr ""
|
5178 |
|
5179 |
-
#: views/subscribers/importExport/import.html:
|
5180 |
msgid "One of the fields contains an invalid email. Please fix before continuing."
|
5181 |
msgstr ""
|
5182 |
|
5183 |
-
#: views/subscribers/importExport/import.html:
|
5184 |
msgid "Custom field could not be created"
|
5185 |
msgstr ""
|
5186 |
|
5187 |
-
#: views/subscribers/importExport/import.html:
|
5188 |
msgid "%1$s subscribers added to %2$s."
|
5189 |
msgstr ""
|
5190 |
|
5191 |
-
#: views/subscribers/importExport/import.html:
|
5192 |
msgid "%1$s existing subscribers were updated and added to %2$s."
|
5193 |
msgstr ""
|
5194 |
|
@@ -5363,11 +5367,47 @@ msgstr ""
|
|
5363 |
msgid "View all changes"
|
5364 |
msgstr ""
|
5365 |
|
5366 |
-
#: views/update.html:
|
5367 |
msgid "Care to Give Your Opinion?"
|
5368 |
msgstr ""
|
5369 |
|
5370 |
-
#: views/update.html:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5371 |
msgid "Awesome! Now, take me to MailPoet"
|
5372 |
msgstr ""
|
5373 |
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: \n"
|
6 |
"Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
|
7 |
+
"POT-Creation-Date: 2018-03-13 23:32:30+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
299 |
msgid "Manage segments"
|
300 |
msgstr ""
|
301 |
|
302 |
+
#: lib/Config/Capabilities.php:67 lib/Config/Menu.php:645 views/premium.html:41
|
303 |
msgid "MailPoet"
|
304 |
msgstr ""
|
305 |
|
473 |
msgid "Migration"
|
474 |
msgstr ""
|
475 |
|
476 |
+
#: lib/Config/Menu.php:565
|
477 |
msgid "In any WordPress role"
|
478 |
msgstr ""
|
479 |
|
1169 |
msgstr ""
|
1170 |
|
1171 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:197
|
1172 |
+
#: views/subscribers/importExport/import.html:54
|
1173 |
msgid "January"
|
1174 |
msgstr ""
|
1175 |
|
1176 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:198
|
1177 |
+
#: views/subscribers/importExport/import.html:55
|
1178 |
msgid "February"
|
1179 |
msgstr ""
|
1180 |
|
1181 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:199
|
1182 |
+
#: views/subscribers/importExport/import.html:56
|
1183 |
msgid "March"
|
1184 |
msgstr ""
|
1185 |
|
1186 |
#: lib/Form/Block/Date.php:124 views/newsletters.html:200
|
1187 |
+
#: views/subscribers/importExport/import.html:57
|
1188 |
msgid "April"
|
1189 |
msgstr ""
|
1190 |
|
1191 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:201
|
1192 |
+
#: views/newsletters.html:213 views/subscribers/importExport/import.html:58
|
1193 |
msgid "May"
|
1194 |
msgstr ""
|
1195 |
|
1196 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:202
|
1197 |
+
#: views/subscribers/importExport/import.html:59
|
1198 |
msgid "June"
|
1199 |
msgstr ""
|
1200 |
|
1201 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:203
|
1202 |
+
#: views/subscribers/importExport/import.html:60
|
1203 |
msgid "July"
|
1204 |
msgstr ""
|
1205 |
|
1206 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:204
|
1207 |
+
#: views/subscribers/importExport/import.html:61
|
1208 |
msgid "August"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
#: lib/Form/Block/Date.php:125 views/newsletters.html:205
|
1212 |
+
#: views/subscribers/importExport/import.html:62
|
1213 |
msgid "September"
|
1214 |
msgstr ""
|
1215 |
|
1216 |
#: lib/Form/Block/Date.php:126 views/newsletters.html:206
|
1217 |
+
#: views/subscribers/importExport/import.html:63
|
1218 |
msgid "October"
|
1219 |
msgstr ""
|
1220 |
|
1221 |
#: lib/Form/Block/Date.php:126 views/newsletters.html:207
|
1222 |
+
#: views/subscribers/importExport/import.html:64
|
1223 |
msgid "November"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
#: lib/Form/Block/Date.php:126 views/newsletters.html:208
|
1227 |
+
#: views/subscribers/importExport/import.html:65
|
1228 |
msgid "December"
|
1229 |
msgstr ""
|
1230 |
|
1584 |
msgid "Not In Segment"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
+
#: lib/Subscribers/ImportExport/Import/Import.php:69
|
1588 |
msgid "Missing or invalid import data."
|
1589 |
msgstr ""
|
1590 |
|
1591 |
+
#: lib/Subscribers/ImportExport/Import/Import.php:90
|
1592 |
msgid "No valid subscribers were found."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
+
#: lib/Subscribers/ImportExport/Import/Import.php:130
|
1596 |
msgid "Unable to save imported subscribers."
|
1597 |
msgstr ""
|
1598 |
|
1655 |
msgstr ""
|
1656 |
|
1657 |
#: lib/Subscribers/ImportExport/ImportExportFactory.php:112
|
1658 |
+
#: views/subscribers/importExport/import.html:50
|
1659 |
msgid "User fields"
|
1660 |
msgstr ""
|
1661 |
|
1894 |
msgid "Saved! Add this form to %1$sa widget%2$s."
|
1895 |
msgstr ""
|
1896 |
|
1897 |
+
#: views/form/editor.html:587 views/subscribers/importExport/import.html:48
|
1898 |
msgid "Add new field"
|
1899 |
msgstr ""
|
1900 |
|
1923 |
msgstr ""
|
1924 |
|
1925 |
#: views/form/templates/blocks/segment.hbs:2
|
1926 |
+
#: views/subscribers/importExport/import.html:46
|
1927 |
msgid "Please select at least one list"
|
1928 |
msgstr ""
|
1929 |
|
2373 |
msgid "Visit MailPoet.com to purchase a key"
|
2374 |
msgstr ""
|
2375 |
|
2376 |
+
#: views/layout.html:62
|
2377 |
msgid ""
|
2378 |
"An error has happened while performing a request, the server has responded "
|
2379 |
"with response code %d"
|
2380 |
msgstr ""
|
2381 |
|
2382 |
+
#: views/layout.html:89
|
2383 |
msgid ""
|
2384 |
"Want to give feedback to the MailPoet team? Contact us here. Please provide "
|
2385 |
"as much information as possible!"
|
3281 |
msgstr ""
|
3282 |
|
3283 |
#: views/newsletters.html:47 views/subscribers/importExport/import/step2.html:8
|
3284 |
+
#: views/subscribers/importExport/import.html:45
|
3285 |
#: views/subscribers/subscribers.html:40
|
3286 |
msgid "Show more details"
|
3287 |
msgstr ""
|
4925 |
msgid "Save settings"
|
4926 |
msgstr ""
|
4927 |
|
4928 |
+
#: views/settings.html:73
|
4929 |
+
msgid "Invalid email addresses: "
|
4930 |
+
msgstr ""
|
4931 |
+
|
4932 |
+
#: views/settings.html:119
|
4933 |
msgid "Settings saved"
|
4934 |
msgstr ""
|
4935 |
|
4936 |
+
#: views/settings.html:186
|
4937 |
msgid ""
|
4938 |
"Are you sure? All of your MailPoet data will be permanently erased "
|
4939 |
"(newsletters, statistics, subscribers, etc.)."
|
4977 |
msgstr ""
|
4978 |
|
4979 |
#: views/subscribers/importExport/export.html:105
|
4980 |
+
#: views/subscribers/importExport/import.html:34
|
4981 |
msgid "Server error:"
|
4982 |
msgstr ""
|
4983 |
|
5081 |
"Look at some [link]examples on our support site[/link]."
|
5082 |
msgstr ""
|
5083 |
|
5084 |
+
#: views/subscribers/importExport/import.html:33
|
5085 |
msgid "No active lists found"
|
5086 |
msgstr ""
|
5087 |
|
5088 |
+
#: views/subscribers/importExport/import.html:35
|
5089 |
msgid "Select"
|
5090 |
msgstr ""
|
5091 |
|
5092 |
+
#: views/subscribers/importExport/import.html:37
|
5093 |
msgid "Only comma-separated (CSV) file formats are supported."
|
5094 |
msgstr ""
|
5095 |
|
5096 |
+
#: views/subscribers/importExport/import.html:38
|
5097 |
msgid ""
|
5098 |
"Your CSV is over %s and is too big to process. Please split the file into "
|
5099 |
"two or more sections."
|
5100 |
msgstr ""
|
5101 |
|
5102 |
+
#: views/subscribers/importExport/import.html:39
|
5103 |
msgid ""
|
5104 |
"Your data could not be processed. Please make sure it is in the correct "
|
5105 |
"format."
|
5106 |
msgstr ""
|
5107 |
|
5108 |
+
#: views/subscribers/importExport/import.html:40
|
5109 |
msgid ""
|
5110 |
"No valid records were found. This file needs to be formatted in a CSV style "
|
5111 |
"(comma-separated). Look at some [link]examples on our support site.[/link]"
|
5112 |
msgstr ""
|
5113 |
|
5114 |
+
#: views/subscribers/importExport/import.html:41
|
5115 |
msgid "%1$s records had issues and were skipped."
|
5116 |
msgstr ""
|
5117 |
|
5118 |
+
#: views/subscribers/importExport/import.html:42
|
5119 |
msgid "%1$s emails are not valid: %2$s"
|
5120 |
msgstr ""
|
5121 |
|
5122 |
+
#: views/subscribers/importExport/import.html:43
|
5123 |
msgid "%1$s emails appear more than once in your file: %2$s"
|
5124 |
msgstr ""
|
5125 |
|
5126 |
+
#: views/subscribers/importExport/import.html:44
|
5127 |
msgid "Hide details"
|
5128 |
msgstr ""
|
5129 |
|
5130 |
+
#: views/subscribers/importExport/import.html:47
|
5131 |
#: views/subscribers/importExport/import.html:49
|
|
|
5132 |
msgid "Add new list"
|
5133 |
msgstr ""
|
5134 |
|
5135 |
+
#: views/subscribers/importExport/import.html:51
|
5136 |
msgid "The selected value is already matched to another field."
|
5137 |
msgstr ""
|
5138 |
|
5139 |
+
#: views/subscribers/importExport/import.html:52
|
5140 |
msgid "Confirm that this field corresponds to the selected field."
|
5141 |
msgstr ""
|
5142 |
|
5143 |
+
#: views/subscribers/importExport/import.html:53
|
5144 |
msgid ""
|
5145 |
"One of the fields contains an invalid email. Please fix it before "
|
5146 |
"continuing."
|
5147 |
msgstr ""
|
5148 |
|
5149 |
+
#: views/subscribers/importExport/import.html:66
|
5150 |
msgid ""
|
5151 |
"Do not match as a 'date field' if most of the rows for that field return "
|
5152 |
"the same error."
|
5153 |
msgstr ""
|
5154 |
|
5155 |
+
#: views/subscribers/importExport/import.html:67
|
5156 |
msgid "First row date cannot be empty."
|
5157 |
msgstr ""
|
5158 |
|
5159 |
+
#: views/subscribers/importExport/import.html:68
|
5160 |
msgid "Verify that the date in blue matches the original date."
|
5161 |
msgstr ""
|
5162 |
|
5163 |
+
#: views/subscribers/importExport/import.html:69
|
5164 |
msgid "PM"
|
5165 |
msgstr ""
|
5166 |
|
5167 |
+
#: views/subscribers/importExport/import.html:70
|
5168 |
msgid "AM"
|
5169 |
msgstr ""
|
5170 |
|
5171 |
+
#: views/subscribers/importExport/import.html:71
|
5172 |
msgid "Error matching date"
|
5173 |
msgstr ""
|
5174 |
|
5175 |
+
#: views/subscribers/importExport/import.html:72
|
5176 |
msgid "One of the fields contains an invalid date. Please fix before continuing."
|
5177 |
msgstr ""
|
5178 |
|
5179 |
+
#: views/subscribers/importExport/import.html:73
|
5180 |
msgid "Error adding a new list:"
|
5181 |
msgstr ""
|
5182 |
|
5183 |
+
#: views/subscribers/importExport/import.html:74
|
5184 |
msgid "One of the fields contains an invalid email. Please fix before continuing."
|
5185 |
msgstr ""
|
5186 |
|
5187 |
+
#: views/subscribers/importExport/import.html:75
|
5188 |
msgid "Custom field could not be created"
|
5189 |
msgstr ""
|
5190 |
|
5191 |
+
#: views/subscribers/importExport/import.html:76
|
5192 |
msgid "%1$s subscribers added to %2$s."
|
5193 |
msgstr ""
|
5194 |
|
5195 |
+
#: views/subscribers/importExport/import.html:77
|
5196 |
msgid "%1$s existing subscribers were updated and added to %2$s."
|
5197 |
msgstr ""
|
5198 |
|
5367 |
msgid "View all changes"
|
5368 |
msgstr ""
|
5369 |
|
5370 |
+
#: views/update.html:36 views/update.html:65
|
5371 |
msgid "Care to Give Your Opinion?"
|
5372 |
msgstr ""
|
5373 |
|
5374 |
+
#: views/update.html:52
|
5375 |
+
msgid "Do you enjoy using MailPoet?"
|
5376 |
+
msgstr ""
|
5377 |
+
|
5378 |
+
#: views/update.html:54
|
5379 |
+
msgid ""
|
5380 |
+
"If you have the time, we’d really appreciate it if you left us a review on "
|
5381 |
+
"the WordPress Plugin Directory."
|
5382 |
+
msgstr ""
|
5383 |
+
|
5384 |
+
#: views/update.html:55
|
5385 |
+
msgid "Every star counts."
|
5386 |
+
msgstr ""
|
5387 |
+
|
5388 |
+
#: views/update.html:58
|
5389 |
+
msgid "No thanks"
|
5390 |
+
msgstr ""
|
5391 |
+
|
5392 |
+
#: views/update.html:59
|
5393 |
+
msgid "Next time"
|
5394 |
+
msgstr ""
|
5395 |
+
|
5396 |
+
#: views/update.html:60
|
5397 |
+
msgid "Rate now"
|
5398 |
+
msgstr ""
|
5399 |
+
|
5400 |
+
#: views/update.html:62
|
5401 |
+
msgid "Care to share criticism or a feature request instead?"
|
5402 |
+
msgstr ""
|
5403 |
+
|
5404 |
+
#: views/update.html:63
|
5405 |
+
msgid ""
|
5406 |
+
"Click on the question mark (?) in the blue circle at the bottom right of "
|
5407 |
+
"this page to send us a message."
|
5408 |
+
msgstr ""
|
5409 |
+
|
5410 |
+
#: views/update.html:73 views/welcome.html:60
|
5411 |
msgid "Awesome! Now, take me to MailPoet"
|
5412 |
msgstr ""
|
5413 |
|
lib/Config/Menu.php
CHANGED
@@ -380,10 +380,13 @@ class Menu {
|
|
380 |
);
|
381 |
|
382 |
$data['is_new_user'] = true;
|
|
|
383 |
if(!empty($data['settings']['installed_at'])) {
|
384 |
$installed_at = Carbon::createFromTimestamp(strtotime($data['settings']['installed_at']));
|
385 |
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
|
386 |
$data['is_new_user'] = $current_time->diffInDays($installed_at) <= 30;
|
|
|
|
|
387 |
}
|
388 |
|
389 |
$readme_file = Env::$path . '/readme.txt';
|
380 |
);
|
381 |
|
382 |
$data['is_new_user'] = true;
|
383 |
+
$data['is_old_user'] = false;
|
384 |
if(!empty($data['settings']['installed_at'])) {
|
385 |
$installed_at = Carbon::createFromTimestamp(strtotime($data['settings']['installed_at']));
|
386 |
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
|
387 |
$data['is_new_user'] = $current_time->diffInDays($installed_at) <= 30;
|
388 |
+
$data['is_old_user'] = $current_time->diffInMonths($installed_at) >= 6;
|
389 |
+
$data['stop_call_for_rating'] = isset($data['settings']['stop_call_for_rating']) ? $data['settings']['stop_call_for_rating'] : false;
|
390 |
}
|
391 |
|
392 |
$readme_file = Env::$path . '/readme.txt';
|
lib/Config/Migrator.php
CHANGED
@@ -174,7 +174,8 @@ class Migrator {
|
|
174 |
'unconfirmed_data longtext,',
|
175 |
'PRIMARY KEY (id),',
|
176 |
'UNIQUE KEY email (email),',
|
177 |
-
'KEY wp_user_id (wp_user_id)',
|
|
|
178 |
);
|
179 |
return $this->sqlify(__FUNCTION__, $attributes);
|
180 |
}
|
174 |
'unconfirmed_data longtext,',
|
175 |
'PRIMARY KEY (id),',
|
176 |
'UNIQUE KEY email (email),',
|
177 |
+
'KEY wp_user_id (wp_user_id),',
|
178 |
+
'KEY updated_at (updated_at)',
|
179 |
);
|
180 |
return $this->sqlify(__FUNCTION__, $attributes);
|
181 |
}
|
lib/Cron/Workers/SendingQueue/SendingQueue.php
CHANGED
@@ -40,6 +40,8 @@ class SendingQueue {
|
|
40 |
$queue->delete();
|
41 |
continue;
|
42 |
}
|
|
|
|
|
43 |
// configure mailer
|
44 |
$this->mailer_task->configureMailer($newsletter);
|
45 |
// get newsletter segments
|
@@ -79,7 +81,7 @@ class SendingQueue {
|
|
79 |
}
|
80 |
$queue = $this->processQueue(
|
81 |
$queue,
|
82 |
-
$
|
83 |
$found_subscribers
|
84 |
);
|
85 |
if($queue->status === SendingQueueModel::STATUS_COMPLETED) {
|
40 |
$queue->delete();
|
41 |
continue;
|
42 |
}
|
43 |
+
// clone the original object to be used for processing
|
44 |
+
$_newsletter = (object)$newsletter->asArray();
|
45 |
// configure mailer
|
46 |
$this->mailer_task->configureMailer($newsletter);
|
47 |
// get newsletter segments
|
81 |
}
|
82 |
$queue = $this->processQueue(
|
83 |
$queue,
|
84 |
+
$_newsletter,
|
85 |
$found_subscribers
|
86 |
);
|
87 |
if($queue->status === SendingQueueModel::STATUS_COMPLETED) {
|
lib/Models/ModelValidator.php
CHANGED
@@ -32,7 +32,7 @@ class ModelValidator extends \Sudzy\Engine {
|
|
32 |
|
33 |
function validateEmail($email) {
|
34 |
$permitted_length = (strlen($email) >= self::EMAIL_MIN_LENGTH && strlen($email) <= self::EMAIL_MAX_LENGTH);
|
35 |
-
$valid_email =
|
36 |
return ($permitted_length && $valid_email);
|
37 |
}
|
38 |
|
32 |
|
33 |
function validateEmail($email) {
|
34 |
$permitted_length = (strlen($email) >= self::EMAIL_MIN_LENGTH && strlen($email) <= self::EMAIL_MAX_LENGTH);
|
35 |
+
$valid_email = is_email($email) !== false && parent::_isEmail($email, null);
|
36 |
return ($permitted_length && $valid_email);
|
37 |
}
|
38 |
|
lib/Newsletter/Url.php
CHANGED
@@ -12,7 +12,7 @@ class Url {
|
|
12 |
|
13 |
static function getViewInBrowserUrl(
|
14 |
$type,
|
15 |
-
|
16 |
$subscriber = false,
|
17 |
$queue = false,
|
18 |
$preview = false
|
12 |
|
13 |
static function getViewInBrowserUrl(
|
14 |
$type,
|
15 |
+
$newsletter,
|
16 |
$subscriber = false,
|
17 |
$queue = false,
|
18 |
$preview = false
|
lib/Segments/WP.php
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
<?php
|
2 |
namespace MailPoet\Segments;
|
3 |
|
|
|
4 |
use MailPoet\Models\Subscriber;
|
5 |
use MailPoet\Models\Segment;
|
6 |
use MailPoet\Models\SubscriberSegment;
|
@@ -80,8 +81,9 @@ class WP {
|
|
80 |
|
81 |
static function synchronizeUsers() {
|
82 |
|
83 |
-
self::updateSubscribersEmails();
|
84 |
-
self::insertSubscribers();
|
|
|
85 |
self::removeFromTrash();
|
86 |
self::updateFirstNames();
|
87 |
self::updateLastNames();
|
@@ -92,20 +94,48 @@ class WP {
|
|
92 |
return true;
|
93 |
}
|
94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
private static function updateSubscribersEmails() {
|
96 |
global $wpdb;
|
|
|
|
|
|
|
97 |
$subscribers_table = Subscriber::$_table;
|
98 |
Subscriber::raw_execute(sprintf('
|
99 |
UPDATE IGNORE %1$s
|
100 |
-
JOIN %2$s as wu ON %1$s.wp_user_id = wu.id
|
101 |
-
SET %1$s.email = wu.user_email
|
102 |
-
WHERE %1$s.wp_user_id IS NOT NULL AND wu.user_email != ""
|
103 |
', $subscribers_table, $wpdb->users));
|
|
|
|
|
|
|
|
|
|
|
104 |
}
|
105 |
|
106 |
private static function insertSubscribers() {
|
107 |
global $wpdb;
|
108 |
$subscribers_table = Subscriber::$_table;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
Subscriber::raw_execute(sprintf('
|
110 |
INSERT IGNORE INTO %1$s(wp_user_id, email, status, created_at)
|
111 |
SELECT wu.id, wu.user_email, "subscribed", CURRENT_TIMESTAMP() FROM %2$s wu
|
@@ -113,6 +143,8 @@ class WP {
|
|
113 |
WHERE mps.wp_user_id IS NULL AND wu.user_email != ""
|
114 |
ON DUPLICATE KEY UPDATE wp_user_id = wu.id
|
115 |
', $subscribers_table, $wpdb->users));
|
|
|
|
|
116 |
}
|
117 |
|
118 |
private static function updateFirstNames() {
|
1 |
<?php
|
2 |
namespace MailPoet\Segments;
|
3 |
|
4 |
+
use MailPoet\Models\ModelValidator;
|
5 |
use MailPoet\Models\Subscriber;
|
6 |
use MailPoet\Models\Segment;
|
7 |
use MailPoet\Models\SubscriberSegment;
|
81 |
|
82 |
static function synchronizeUsers() {
|
83 |
|
84 |
+
$updated_users_emails = self::updateSubscribersEmails();
|
85 |
+
$inserted_users_emails = self::insertSubscribers();
|
86 |
+
self::removeUpdatedSubscribersWithInvalidEmail(array_merge($updated_users_emails, $inserted_users_emails));
|
87 |
self::removeFromTrash();
|
88 |
self::updateFirstNames();
|
89 |
self::updateLastNames();
|
94 |
return true;
|
95 |
}
|
96 |
|
97 |
+
private static function removeUpdatedSubscribersWithInvalidEmail($updated_emails) {
|
98 |
+
$validator = new ModelValidator();
|
99 |
+
$invalid_wp_user_ids = array_map(function($item) {
|
100 |
+
return $item['id'];
|
101 |
+
},
|
102 |
+
array_filter($updated_emails, function($updated_email) use($validator) {
|
103 |
+
return !$validator->validateEmail($updated_email['email']);
|
104 |
+
}));
|
105 |
+
if(!$invalid_wp_user_ids) {
|
106 |
+
return;
|
107 |
+
}
|
108 |
+
\ORM::for_table(Subscriber::$_table)->whereIn('wp_user_id', $invalid_wp_user_ids)->delete_many();
|
109 |
+
}
|
110 |
+
|
111 |
private static function updateSubscribersEmails() {
|
112 |
global $wpdb;
|
113 |
+
Subscriber::raw_execute('SELECT NOW();');
|
114 |
+
$start_time = Subscriber::get_last_statement()->fetch(\PDO::FETCH_COLUMN);
|
115 |
+
|
116 |
$subscribers_table = Subscriber::$_table;
|
117 |
Subscriber::raw_execute(sprintf('
|
118 |
UPDATE IGNORE %1$s
|
119 |
+
INNER JOIN %2$s as wu ON %1$s.wp_user_id = wu.id
|
120 |
+
SET %1$s.email = wu.user_email;
|
|
|
121 |
', $subscribers_table, $wpdb->users));
|
122 |
+
|
123 |
+
return \ORM::for_table(Subscriber::$_table)->raw_query(sprintf(
|
124 |
+
'SELECT wp_user_id as id, email FROM %s
|
125 |
+
WHERE updated_at >= \'%s\';
|
126 |
+
', $subscribers_table, $start_time))->findArray();
|
127 |
}
|
128 |
|
129 |
private static function insertSubscribers() {
|
130 |
global $wpdb;
|
131 |
$subscribers_table = Subscriber::$_table;
|
132 |
+
|
133 |
+
$inserterd_user_ids = \ORM::for_table($wpdb->users)->raw_query(sprintf(
|
134 |
+
'SELECT %2$s.id, %2$s.user_email as email FROM %2$s
|
135 |
+
LEFT JOIN %1$s AS mps ON mps.wp_user_id = %2$s.id
|
136 |
+
WHERE mps.wp_user_id IS NULL AND %2$s.user_email != ""
|
137 |
+
', $subscribers_table, $wpdb->users))->findArray();
|
138 |
+
|
139 |
Subscriber::raw_execute(sprintf('
|
140 |
INSERT IGNORE INTO %1$s(wp_user_id, email, status, created_at)
|
141 |
SELECT wu.id, wu.user_email, "subscribed", CURRENT_TIMESTAMP() FROM %2$s wu
|
143 |
WHERE mps.wp_user_id IS NULL AND wu.user_email != ""
|
144 |
ON DUPLICATE KEY UPDATE wp_user_id = wu.id
|
145 |
', $subscribers_table, $wpdb->users));
|
146 |
+
|
147 |
+
return $inserterd_user_ids;
|
148 |
}
|
149 |
|
150 |
private static function updateFirstNames() {
|
lib/Subscribers/ImportExport/Import/Import.php
CHANGED
@@ -3,6 +3,7 @@ namespace MailPoet\Subscribers\ImportExport\Import;
|
|
3 |
|
4 |
use MailPoet\Form\Block\Date;
|
5 |
use MailPoet\Models\CustomField;
|
|
|
6 |
use MailPoet\Models\Newsletter;
|
7 |
use MailPoet\Models\Subscriber;
|
8 |
use MailPoet\Models\SubscriberCustomField;
|
@@ -148,12 +149,13 @@ class Import {
|
|
148 |
|
149 |
function validateSubscribersData($subscribers_data, $validation_rules) {
|
150 |
$invalid_records = array();
|
|
|
151 |
foreach($subscribers_data as $column => &$data) {
|
152 |
$validation_rule = $validation_rules[$column];
|
153 |
if($validation_rule === 'email') {
|
154 |
$data = array_map(
|
155 |
-
function($index, $email) use(&$invalid_records) {
|
156 |
-
if(
|
157 |
$invalid_records[] = $index;
|
158 |
}
|
159 |
return strtolower($email);
|
3 |
|
4 |
use MailPoet\Form\Block\Date;
|
5 |
use MailPoet\Models\CustomField;
|
6 |
+
use MailPoet\Models\ModelValidator;
|
7 |
use MailPoet\Models\Newsletter;
|
8 |
use MailPoet\Models\Subscriber;
|
9 |
use MailPoet\Models\SubscriberCustomField;
|
149 |
|
150 |
function validateSubscribersData($subscribers_data, $validation_rules) {
|
151 |
$invalid_records = array();
|
152 |
+
$validator = new ModelValidator();
|
153 |
foreach($subscribers_data as $column => &$data) {
|
154 |
$validation_rule = $validation_rules[$column];
|
155 |
if($validation_rule === 'email') {
|
156 |
$data = array_map(
|
157 |
+
function($index, $email) use(&$invalid_records, $validator) {
|
158 |
+
if(!$validator->validateEmail($email)) {
|
159 |
$invalid_records[] = $index;
|
160 |
}
|
161 |
return strtolower($email);
|
mailpoet.php
CHANGED
@@ -4,7 +4,7 @@ if(!defined('ABSPATH')) exit;
|
|
4 |
|
5 |
/*
|
6 |
* Plugin Name: MailPoet 3 (New)
|
7 |
-
* Version: 3.5.
|
8 |
* Plugin URI: http://www.mailpoet.com
|
9 |
* Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
|
10 |
* Author: MailPoet
|
@@ -20,7 +20,7 @@ if(!defined('ABSPATH')) exit;
|
|
20 |
*/
|
21 |
|
22 |
$mailpoet_plugin = array(
|
23 |
-
'version' => '3.5.
|
24 |
'filename' => __FILE__,
|
25 |
'path' => dirname(__FILE__),
|
26 |
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
|
4 |
|
5 |
/*
|
6 |
* Plugin Name: MailPoet 3 (New)
|
7 |
+
* Version: 3.5.1
|
8 |
* Plugin URI: http://www.mailpoet.com
|
9 |
* Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
|
10 |
* Author: MailPoet
|
20 |
*/
|
21 |
|
22 |
$mailpoet_plugin = array(
|
23 |
+
'version' => '3.5.1',
|
24 |
'filename' => __FILE__,
|
25 |
'path' => dirname(__FILE__),
|
26 |
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: newsletter, email, welcome email, post notification, autoresponder, signup
|
|
4 |
Requires at least: 4.7
|
5 |
Tested up to: 4.9
|
6 |
Requires PHP: 5.3
|
7 |
-
Stable tag: 3.5.
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -116,6 +116,11 @@ Stop by our [support site](https://www.mailpoet.com/support).
|
|
116 |
|
117 |
== Changelog ==
|
118 |
|
|
|
|
|
|
|
|
|
|
|
119 |
= 3.5.0 - 2018-03-06 =
|
120 |
* Premium: bulk actions can now be executed on subscribers belonging to a selected segment;
|
121 |
* Improved: a proper error page is displayed if user credentials can't be verified when clicking a tracked newsletter link. Thanks, Bernhard;
|
4 |
Requires at least: 4.7
|
5 |
Tested up to: 4.9
|
6 |
Requires PHP: 5.3
|
7 |
+
Stable tag: 3.5.1
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
116 |
|
117 |
== Changelog ==
|
118 |
|
119 |
+
= 3.5.1 - 2018-03-13 =
|
120 |
+
* Improved: email validation for WordPress user synchronization;
|
121 |
+
* Fixed: import no longer discards e-mails with dashes. A big thank-you to everyone who reported the issue;
|
122 |
+
* Fixed: sending does not get stuck on the last step of the newsletter creation process. Thanks, René!
|
123 |
+
|
124 |
= 3.5.0 - 2018-03-06 =
|
125 |
* Premium: bulk actions can now be executed on subscribers belonging to a selected segment;
|
126 |
* Improved: a proper error page is displayed if user credentials can't be verified when clicking a tracked newsletter link. Thanks, Bernhard;
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit172c2bcf023cb1eb88fc8ba92912848b::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit304fcf7f744d8f15317439a24e53ab80
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit304fcf7f744d8f15317439a24e53ab80
|
|
48 |
$loader->register(true);
|
49 |
|
50 |
if ($useStaticLoader) {
|
51 |
-
$includeFiles = Composer\Autoload\
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
-
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
-
function
|
64 |
{
|
65 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit172c2bcf023cb1eb88fc8ba92912848b
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit172c2bcf023cb1eb88fc8ba92912848b', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit172c2bcf023cb1eb88fc8ba92912848b', 'loadClassLoader'));
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit172c2bcf023cb1eb88fc8ba92912848b::getInitializer($loader));
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
48 |
$loader->register(true);
|
49 |
|
50 |
if ($useStaticLoader) {
|
51 |
+
$includeFiles = Composer\Autoload\ComposerStaticInit172c2bcf023cb1eb88fc8ba92912848b::$files;
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequire172c2bcf023cb1eb88fc8ba92912848b($fileIdentifier, $file);
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
+
function composerRequire172c2bcf023cb1eb88fc8ba92912848b($fileIdentifier, $file)
|
64 |
{
|
65 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
require $file;
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
@@ -986,10 +986,10 @@ class ComposerStaticInit304fcf7f744d8f15317439a24e53ab80
|
|
986 |
public static function getInitializer(ClassLoader $loader)
|
987 |
{
|
988 |
return \Closure::bind(function () use ($loader) {
|
989 |
-
$loader->prefixLengthsPsr4 =
|
990 |
-
$loader->prefixDirsPsr4 =
|
991 |
-
$loader->prefixesPsr0 =
|
992 |
-
$loader->classMap =
|
993 |
|
994 |
}, null, ClassLoader::class);
|
995 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit172c2bcf023cb1eb88fc8ba92912848b
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
986 |
public static function getInitializer(ClassLoader $loader)
|
987 |
{
|
988 |
return \Closure::bind(function () use ($loader) {
|
989 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit172c2bcf023cb1eb88fc8ba92912848b::$prefixLengthsPsr4;
|
990 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit172c2bcf023cb1eb88fc8ba92912848b::$prefixDirsPsr4;
|
991 |
+
$loader->prefixesPsr0 = ComposerStaticInit172c2bcf023cb1eb88fc8ba92912848b::$prefixesPsr0;
|
992 |
+
$loader->classMap = ComposerStaticInit172c2bcf023cb1eb88fc8ba92912848b::$classMap;
|
993 |
|
994 |
}, null, ClassLoader::class);
|
995 |
}
|
views/layout.html
CHANGED
@@ -48,6 +48,8 @@ jQuery('.toplevel_page_mailpoet-newsletters.menu-top-last')
|
|
48 |
var mailpoet_premium_version = <%= json_encode(mailpoet_premium_version()) %>;
|
49 |
var mailpoet_analytics_enabled = <%= is_analytics_enabled() | json_encode %>;
|
50 |
var mailpoet_analytics_data = <%= json_encode(get_analytics_data()) %>;
|
|
|
|
|
51 |
</script>
|
52 |
|
53 |
<!-- javascripts -->
|
48 |
var mailpoet_premium_version = <%= json_encode(mailpoet_premium_version()) %>;
|
49 |
var mailpoet_analytics_enabled = <%= is_analytics_enabled() | json_encode %>;
|
50 |
var mailpoet_analytics_data = <%= json_encode(get_analytics_data()) %>;
|
51 |
+
// RFC 5322 standard; http://emailregex.com/ combined with https://google.github.io/closure-library/api/goog.format.EmailAddress.html#isValid
|
52 |
+
var mailpoet_email_regex = /(?=^[+a-zA-Z0-9_.!#$%&'*\/=?^`{|}~-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,63}$)(?=^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))/;
|
53 |
</script>
|
54 |
|
55 |
<!-- javascripts -->
|
views/settings.html
CHANGED
@@ -64,6 +64,17 @@
|
|
64 |
$(function() {
|
65 |
// on form submission
|
66 |
$('#mailpoet_settings_form').on('submit', function() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
// if reCAPTCHA is enabled but keys are emty, show error
|
68 |
var enabled = $('input[name="re_captcha[enabled]"]:checked').val(),
|
69 |
site_key = $('input[name="re_captcha[site_token]"]').val().trim(),
|
64 |
$(function() {
|
65 |
// on form submission
|
66 |
$('#mailpoet_settings_form').on('submit', function() {
|
67 |
+
// Check if filled emails are valid
|
68 |
+
var invalidEmails = $.map($('#mailpoet_settings_form')[0].elements, function(el) {
|
69 |
+
return el.type === 'email' && el.value && !window.mailpoet_email_regex.test(el.value) ? el.value : null;
|
70 |
+
}).filter(function(val) { return !!val; });
|
71 |
+
if (invalidEmails.length) {
|
72 |
+
MailPoet.Notice.error(
|
73 |
+
"<%= __('Invalid email addresses: ') | escape('js') %>" + invalidEmails.join(', '),
|
74 |
+
{ scroll: true }
|
75 |
+
);
|
76 |
+
return false;
|
77 |
+
}
|
78 |
// if reCAPTCHA is enabled but keys are emty, show error
|
79 |
var enabled = $('input[name="re_captcha[enabled]"]:checked').val(),
|
80 |
site_key = $('input[name="re_captcha[site_token]"]').val().trim(),
|
views/subscribers/importExport/import.html
CHANGED
@@ -24,9 +24,7 @@
|
|
24 |
importData = {},
|
25 |
mailpoetColumnsSelect2 = <%= subscriberFieldsSelect2|raw %>,
|
26 |
mailpoetColumns = <%= subscriberFields|raw %>,
|
27 |
-
mailpoetSegments = <%= segments|raw
|
28 |
-
// RFC 5322 standard; http://emailregex.com/
|
29 |
-
emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
30 |
</script>
|
31 |
<% endblock %>
|
32 |
|
24 |
importData = {},
|
25 |
mailpoetColumnsSelect2 = <%= subscriberFieldsSelect2|raw %>,
|
26 |
mailpoetColumns = <%= subscriberFields|raw %>,
|
27 |
+
mailpoetSegments = <%= segments|raw %>
|
|
|
|
|
28 |
</script>
|
29 |
<% endblock %>
|
30 |
|
views/update.html
CHANGED
@@ -31,9 +31,9 @@
|
|
31 |
</div>
|
32 |
|
33 |
<div class="feature-section one-col mailpoet_centered">
|
34 |
-
<h2><%= __('Care to Give Your Opinion?') %></h2>
|
35 |
|
36 |
<% if(is_new_user) %>
|
|
|
37 |
<div class="pd-embed" id="pd_1516701033"></div>
|
38 |
<script type="text/javascript">
|
39 |
var _polldaddy = [] || _polldaddy;
|
@@ -48,7 +48,21 @@
|
|
48 |
|
49 |
(function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/survey.js':'http://i0.poll.fm/survey.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-embed'));
|
50 |
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
<% else %>
|
|
|
52 |
<script type="text/javascript" charset="utf-8" src="https://secure.polldaddy.com/p/9942888.js"></script>
|
53 |
<noscript><a href="https://polldaddy.com/poll/9942888/">Imagine you could pick just 2 features to be added with our next release. Which ones would they be?</a></noscript>
|
54 |
<% endif %>
|
@@ -63,6 +77,25 @@
|
|
63 |
|
64 |
<script type="text/javascript">
|
65 |
jQuery(function($) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
$(function() {
|
67 |
MailPoet.trackEvent(
|
68 |
'User has updated MailPoet',
|
@@ -90,5 +123,6 @@
|
|
90 |
|
91 |
});
|
92 |
|
|
|
93 |
</script>
|
94 |
<% endblock %>
|
31 |
</div>
|
32 |
|
33 |
<div class="feature-section one-col mailpoet_centered">
|
|
|
34 |
|
35 |
<% if(is_new_user) %>
|
36 |
+
<h2><%= __('Care to Give Your Opinion?') %></h2>
|
37 |
<div class="pd-embed" id="pd_1516701033"></div>
|
38 |
<script type="text/javascript">
|
39 |
var _polldaddy = [] || _polldaddy;
|
48 |
|
49 |
(function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/survey.js':'http://i0.poll.fm/survey.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-embed'));
|
50 |
</script>
|
51 |
+
<% elseif(is_old_user and not stop_call_for_rating) %>
|
52 |
+
<h2><%= __('Do you enjoy using MailPoet?') %></h2>
|
53 |
+
<p>
|
54 |
+
<%= __('If you have the time, we’d really appreciate it if you left us a review on the WordPress Plugin Directory.') %>
|
55 |
+
<br><%= __('Every star counts.') %>
|
56 |
+
|
57 |
+
<p>
|
58 |
+
<a class="button" id="no-thanks"><%= __('No thanks') %></a>
|
59 |
+
<a class="button" href="admin.php?page=mailpoet-newsletters"><%= __('Next time') %></a>
|
60 |
+
<a class="button button-primary" id="rate-now" href="https://wordpress.org/support/plugin/mailpoet/reviews/?rate=5#new-post" target="_blank"><%= __('Rate now') %></a>
|
61 |
+
<p>
|
62 |
+
<%= __('Care to share criticism or a feature request instead?') %>
|
63 |
+
<br><%= __('Click on the question mark (?) in the blue circle at the bottom right of this page to send us a message.') %>
|
64 |
<% else %>
|
65 |
+
<h2><%= __('Care to Give Your Opinion?') %></h2>
|
66 |
<script type="text/javascript" charset="utf-8" src="https://secure.polldaddy.com/p/9942888.js"></script>
|
67 |
<noscript><a href="https://polldaddy.com/poll/9942888/">Imagine you could pick just 2 features to be added with our next release. Which ones would they be?</a></noscript>
|
68 |
<% endif %>
|
77 |
|
78 |
<script type="text/javascript">
|
79 |
jQuery(function($) {
|
80 |
+
function stopShowingCallForRating() {
|
81 |
+
return MailPoet.Ajax.post({
|
82 |
+
api_version: window.mailpoet_api_version,
|
83 |
+
endpoint: 'settings',
|
84 |
+
action: 'set',
|
85 |
+
data: {
|
86 |
+
stop_call_for_rating: true,
|
87 |
+
}
|
88 |
+
});
|
89 |
+
}
|
90 |
+
$('#no-thanks').click(function (e) {
|
91 |
+
e.preventDefault();
|
92 |
+
stopShowingCallForRating().done(function () {
|
93 |
+
window.location.href = 'admin.php?page=mailpoet-newsletters';
|
94 |
+
});
|
95 |
+
return false;
|
96 |
+
});
|
97 |
+
$('#rate-now').click(stopShowingCallForRating);
|
98 |
+
|
99 |
$(function() {
|
100 |
MailPoet.trackEvent(
|
101 |
'User has updated MailPoet',
|
123 |
|
124 |
});
|
125 |
|
126 |
+
|
127 |
</script>
|
128 |
<% endblock %>
|