Version Description
- 2017-07-18 =
- Added: you can now duplicate any item in the email designer;
- Improved: added filter to specify custom SMTP connection timeout value. Thanks, Rik;
- Improved: added a custom filter to whitelist JS/CSS styles that are loaded by other plugins on MailPoet's pages;
- Fixed: sending is not interrupted if a newsletter contains URLs with unicode characters. Thanks Sam!
- Fixed: sent date is reset when newsletter is duplicated;
- Fixed: SMTP sending frequency is properly updated when changed;
- Fixed: newsletter/form/subscriber listings no longer throw an error on some PHP 5.3 hosts. Thanks, Jrme!
Download this release
Release Info
Developer | wysija |
Plugin | MailPoet Newsletters (New) |
Version | 3.0.0-beta.36.3.1 |
Comparing to | |
See all releases |
Code changes from version 3.0.0-beta.36.3.0 to 3.0.0-beta.36.3.1
- assets/css/{admin.c73ddfe6.css → admin.06d5a0b9.css} +127 -25
- assets/css/manifest.json +1 -1
- assets/js/{admin.65d0dc6d.js → admin.f15adcea.js} +20 -17
- assets/js/{admin_vendor.927b0f96.js → admin_vendor.e019c409.js} +1 -1
- assets/js/manifest.json +4 -4
- assets/js/{newsletter_editor.7d386d8d.js → newsletter_editor.cec09cf2.js} +12 -0
- assets/js/{vendor.c136ccd7.js → vendor.6d57818a.js} +1 -1
- lang/mailpoet.pot +166 -101
- lib/Config/Menu.php +1 -1
- lib/Config/Populator.php +9 -3
- lib/Cron/Workers/SendingQueue/SendingQueue.php +1 -1
- lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +7 -0
- lib/Mailer/MailerLog.php +1 -1
- lib/Mailer/Methods/SMTP.php +4 -3
- lib/Models/Model.php +10 -1
- lib/Models/Newsletter.php +3 -0
- lib/Newsletter/Links/Links.php +47 -66
- lib/Newsletter/Renderer/Renderer.php +1 -1
- lib/Newsletter/Shortcodes/Categories/Link.php +2 -0
- lib/Util/ConflictResolver.php +2 -0
- mailpoet.php +2 -2
- readme.txt +11 -2
- vendor/autoload.php +1 -1
- vendor/composer/ClassLoader.php +3 -7
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +5 -5
- views/newsletter/templates/blocks/base/toolsGeneric.hbs +3 -2
- views/newsletter/templates/svg/block-tools/duplicate.svg +30 -0
- views/settings/mta.html +72 -85
- views/settings/premium.html +4 -4
- views/update.html +60 -11
- views/welcome.html +5 -2
assets/css/{admin.c73ddfe6.css → admin.06d5a0b9.css}
RENAMED
@@ -2780,16 +2780,68 @@ textarea.parsley-error {
|
|
2780 |
}
|
2781 |
#mailpoet_settings .mailpoet_sending_methods {
|
2782 |
margin: 25px 0 0 0;
|
2783 |
-
|
2784 |
-
|
2785 |
-
|
2786 |
-
|
2787 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2788 |
margin: 0 25px 25px 0;
|
2789 |
-
width: 300px;
|
2790 |
-
height: 300px;
|
2791 |
border: 1px solid #dedede;
|
2792 |
background-color: #fff;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2793 |
}
|
2794 |
#mailpoet_settings .mailpoet_sending_methods h3 {
|
2795 |
text-align: center;
|
@@ -2800,12 +2852,32 @@ textarea.parsley-error {
|
|
2800 |
font-size: 14px;
|
2801 |
}
|
2802 |
#mailpoet_settings .mailpoet_sending_methods .mailpoet_status {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2803 |
background-color: #2f2f2f;
|
2804 |
color: #fff;
|
2805 |
-
position: absolute;
|
2806 |
-
bottom: 0;
|
2807 |
-
left: 0;
|
2808 |
-
right: 0;
|
2809 |
-o-text-overflow: ellipsis;
|
2810 |
text-overflow: ellipsis;
|
2811 |
padding: 15px;
|
@@ -2823,30 +2895,42 @@ textarea.parsley-error {
|
|
2823 |
#mailpoet_settings .mailpoet_sending_methods .mailpoet_active #mailpoet_mta_activate {
|
2824 |
visibility: hidden;
|
2825 |
}
|
2826 |
-
#mailpoet_settings .
|
2827 |
-
|
2828 |
-
|
2829 |
-
|
2830 |
-
position: absolute;
|
2831 |
-
right: 15px;
|
2832 |
-
}
|
2833 |
-
#mailpoet_settings .mailpoet_sending_methods .mailpoet_actions .button-secondary {
|
2834 |
-
margin: 0 -6px -4px 0;
|
2835 |
}
|
2836 |
-
#mailpoet_settings .
|
2837 |
content: '✔ ';
|
2838 |
}
|
2839 |
-
#mailpoet_settings .
|
2840 |
content: '✗ ';
|
2841 |
}
|
2842 |
@media screen and (max-width: 782px) {
|
2843 |
#mailpoet_settings .form-table th {
|
2844 |
width: auto;
|
2845 |
}
|
2846 |
-
#mailpoet_settings .mailpoet_sending_methods
|
2847 |
-
|
2848 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2849 |
margin-right: 0;
|
|
|
|
|
2850 |
}
|
2851 |
}
|
2852 |
.mailpoet_progress {
|
@@ -2998,6 +3082,24 @@ textarea.parsley-error {
|
|
2998 |
.mailpoet-about-wrap .feature-section.two-col h3 {
|
2999 |
margin-top: 0;
|
3000 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3001 |
.mailpoet-about-wrap .feature-section h4 {
|
3002 |
margin: 1.4em 0 0.6em 0;
|
3003 |
font-size: 1em;
|
2780 |
}
|
2781 |
#mailpoet_settings .mailpoet_sending_methods {
|
2782 |
margin: 25px 0 0 0;
|
2783 |
+
display: -webkit-box;
|
2784 |
+
display: -moz-box;
|
2785 |
+
display: -webkit-flex;
|
2786 |
+
display: -ms-flexbox;
|
2787 |
+
display: box;
|
2788 |
+
display: flex;
|
2789 |
+
-webkit-box-orient: horizontal;
|
2790 |
+
-moz-box-orient: horizontal;
|
2791 |
+
-o-box-orient: horizontal;
|
2792 |
+
-webkit-flex-direction: row;
|
2793 |
+
-ms-flex-direction: row;
|
2794 |
+
flex-direction: row;
|
2795 |
+
-webkit-box-pack: start;
|
2796 |
+
-moz-box-pack: start;
|
2797 |
+
-o-box-pack: start;
|
2798 |
+
-ms-flex-pack: start;
|
2799 |
+
-webkit-justify-content: flex-start;
|
2800 |
+
justify-content: flex-start;
|
2801 |
+
}
|
2802 |
+
#mailpoet_settings .mailpoet_sending_methods > li {
|
2803 |
+
-webkit-box-flex: 1;
|
2804 |
+
-moz-box-flex: 1;
|
2805 |
+
-o-box-flex: 1;
|
2806 |
+
-ms-box-flex: 1;
|
2807 |
+
box-flex: 1;
|
2808 |
+
-webkit-flex-grow: 1;
|
2809 |
+
flex-grow: 1;
|
2810 |
+
-webkit-flex-shrink: 1;
|
2811 |
+
flex-shrink: 1;
|
2812 |
+
display: -webkit-box;
|
2813 |
+
display: -moz-box;
|
2814 |
+
display: -webkit-flex;
|
2815 |
+
display: -ms-flexbox;
|
2816 |
+
display: box;
|
2817 |
+
display: flex;
|
2818 |
+
-webkit-box-orient: vertical;
|
2819 |
+
-moz-box-orient: vertical;
|
2820 |
+
-o-box-orient: vertical;
|
2821 |
+
-webkit-flex-direction: column;
|
2822 |
+
-ms-flex-direction: column;
|
2823 |
+
flex-direction: column;
|
2824 |
+
-webkit-flex-basis: 0;
|
2825 |
+
flex-basis: 0;
|
2826 |
margin: 0 25px 25px 0;
|
|
|
|
|
2827 |
border: 1px solid #dedede;
|
2828 |
background-color: #fff;
|
2829 |
+
max-width: 500px;
|
2830 |
+
}
|
2831 |
+
#mailpoet_settings .mailpoet_sending_methods > li .mailpoet_sending_method_description {
|
2832 |
+
padding: 25px;
|
2833 |
+
-webkit-box-flex: 1;
|
2834 |
+
-moz-box-flex: 1;
|
2835 |
+
-o-box-flex: 1;
|
2836 |
+
-ms-box-flex: 1;
|
2837 |
+
box-flex: 1;
|
2838 |
+
-webkit-flex-grow: 1;
|
2839 |
+
flex-grow: 1;
|
2840 |
+
-webkit-flex-shrink: 0;
|
2841 |
+
flex-shrink: 0;
|
2842 |
+
}
|
2843 |
+
#mailpoet_settings .mailpoet_sending_methods > li:last-child {
|
2844 |
+
margin-right: 0;
|
2845 |
}
|
2846 |
#mailpoet_settings .mailpoet_sending_methods h3 {
|
2847 |
text-align: center;
|
2852 |
font-size: 14px;
|
2853 |
}
|
2854 |
#mailpoet_settings .mailpoet_sending_methods .mailpoet_status {
|
2855 |
+
display: -webkit-box;
|
2856 |
+
display: -moz-box;
|
2857 |
+
display: -webkit-flex;
|
2858 |
+
display: -ms-flexbox;
|
2859 |
+
display: box;
|
2860 |
+
display: flex;
|
2861 |
+
-webkit-box-orient: horizontal;
|
2862 |
+
-moz-box-orient: horizontal;
|
2863 |
+
-o-box-orient: horizontal;
|
2864 |
+
-webkit-flex-direction: row;
|
2865 |
+
-ms-flex-direction: row;
|
2866 |
+
flex-direction: row;
|
2867 |
+
-webkit-box-pack: justify;
|
2868 |
+
-moz-box-pack: justify;
|
2869 |
+
-o-box-pack: justify;
|
2870 |
+
-ms-flex-pack: justify;
|
2871 |
+
-webkit-justify-content: space-between;
|
2872 |
+
justify-content: space-between;
|
2873 |
+
-webkit-box-align: center;
|
2874 |
+
-moz-box-align: center;
|
2875 |
+
-o-box-align: center;
|
2876 |
+
-ms-flex-align: center;
|
2877 |
+
-webkit-align-items: center;
|
2878 |
+
align-items: center;
|
2879 |
background-color: #2f2f2f;
|
2880 |
color: #fff;
|
|
|
|
|
|
|
|
|
2881 |
-o-text-overflow: ellipsis;
|
2882 |
text-overflow: ellipsis;
|
2883 |
padding: 15px;
|
2895 |
#mailpoet_settings .mailpoet_sending_methods .mailpoet_active #mailpoet_mta_activate {
|
2896 |
visibility: hidden;
|
2897 |
}
|
2898 |
+
#mailpoet_settings ul.sending-method-benefits {
|
2899 |
+
list-style-type: none;
|
2900 |
+
margin-bottom: 2em;
|
2901 |
+
margin-top: 2em;
|
|
|
|
|
|
|
|
|
|
|
2902 |
}
|
2903 |
+
#mailpoet_settings .mailpoet_success_item::before {
|
2904 |
content: '✔ ';
|
2905 |
}
|
2906 |
+
#mailpoet_settings .mailpoet_error_item::before {
|
2907 |
content: '✗ ';
|
2908 |
}
|
2909 |
@media screen and (max-width: 782px) {
|
2910 |
#mailpoet_settings .form-table th {
|
2911 |
width: auto;
|
2912 |
}
|
2913 |
+
#mailpoet_settings .mailpoet_sending_methods {
|
2914 |
+
-webkit-box-orient: horizontal;
|
2915 |
+
-moz-box-orient: horizontal;
|
2916 |
+
-o-box-orient: horizontal;
|
2917 |
+
-webkit-box-lines: multiple;
|
2918 |
+
-moz-box-lines: multiple;
|
2919 |
+
-o-box-lines: multiple;
|
2920 |
+
-webkit-flex-flow: row wrap;
|
2921 |
+
-ms-flex-flow: row wrap;
|
2922 |
+
flex-flow: row wrap;
|
2923 |
+
-webkit-box-pack: distribute;
|
2924 |
+
-moz-box-pack: distribute;
|
2925 |
+
-o-box-pack: distribute;
|
2926 |
+
-ms-flex-pack: distribute;
|
2927 |
+
-webkit-justify-content: space-around;
|
2928 |
+
justify-content: space-around;
|
2929 |
+
}
|
2930 |
+
#mailpoet_settings .mailpoet_sending_methods > li {
|
2931 |
margin-right: 0;
|
2932 |
+
-webkit-flex-basis: auto;
|
2933 |
+
flex-basis: auto;
|
2934 |
}
|
2935 |
}
|
2936 |
.mailpoet_progress {
|
3082 |
.mailpoet-about-wrap .feature-section.two-col h3 {
|
3083 |
margin-top: 0;
|
3084 |
}
|
3085 |
+
.mailpoet-about-wrap .feature-section.one-col {
|
3086 |
+
width: 700px;
|
3087 |
+
margin: 0 auto;
|
3088 |
+
text-align: center;
|
3089 |
+
}
|
3090 |
+
.mailpoet-about-wrap .feature-section.one-col > a.button {
|
3091 |
+
margin-top: 2em;
|
3092 |
+
}
|
3093 |
+
.mailpoet-about-wrap .feature-section.one-col-left {
|
3094 |
+
width: 700px;
|
3095 |
+
margin: 0 auto;
|
3096 |
+
}
|
3097 |
+
.mailpoet-about-wrap .feature-section h2.mailpoet-feature-top {
|
3098 |
+
margin: 50px auto;
|
3099 |
+
}
|
3100 |
+
.mailpoet-about-wrap .feature-section .lead-description ~ p {
|
3101 |
+
margin-top: 3em;
|
3102 |
+
}
|
3103 |
.mailpoet-about-wrap .feature-section h4 {
|
3104 |
margin: 1.4em 0 0.6em 0;
|
3105 |
font-size: 1em;
|
assets/css/manifest.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
{
|
2 |
-
"admin.css": "admin.
|
3 |
"importExport.css": "importExport.b3745466.css",
|
4 |
"newsletter_editor.css": "newsletter_editor.aace9f8f.css",
|
5 |
"public.css": "public.cae357df.css",
|
1 |
{
|
2 |
+
"admin.css": "admin.06d5a0b9.css",
|
3 |
"importExport.css": "importExport.b3745466.css",
|
4 |
"newsletter_editor.css": "newsletter_editor.aace9f8f.css",
|
5 |
"public.css": "public.cae357df.css",
|
assets/js/{admin.65d0dc6d.js → admin.f15adcea.js}
RENAMED
@@ -9473,8 +9473,8 @@ webpackJsonp([0],[
|
|
9473 |
if (this.props.onChange) {
|
9474 |
return this.props.onChange(e);
|
9475 |
} else {
|
9476 |
-
var item = this.state.item
|
9477 |
-
|
9478 |
|
9479 |
item[field] = e.target.value;
|
9480 |
|
@@ -9487,8 +9487,9 @@ webpackJsonp([0],[
|
|
9487 |
render: function render() {
|
9488 |
var _this3 = this;
|
9489 |
|
|
|
9490 |
if (this.getErrors() !== undefined) {
|
9491 |
-
|
9492 |
return React.createElement(
|
9493 |
'p',
|
9494 |
{ key: 'error-' + index, className: 'mailpoet_error' },
|
@@ -26409,8 +26410,8 @@ webpackJsonp([0],[
|
|
26409 |
},
|
26410 |
MailPoet.I18n.t('delete')
|
26411 |
)
|
26412 |
-
)
|
26413 |
-
|
26414 |
|
26415 |
if (typeof template.thumbnail === 'string' && template.thumbnail.length > 0) {
|
26416 |
thumbnail = React.createElement(
|
@@ -26678,8 +26679,8 @@ webpackJsonp([0],[
|
|
26678 |
}
|
26679 |
},
|
26680 |
handleFormChange: function handleFormChange(e) {
|
26681 |
-
var item = this.state.item
|
26682 |
-
|
26683 |
|
26684 |
item[field] = e.target.value;
|
26685 |
|
@@ -26754,9 +26755,11 @@ webpackJsonp([0],[
|
|
26754 |
|
26755 |
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2), __webpack_require__(273), __webpack_require__(278), __webpack_require__(274), __webpack_require__(422)], __WEBPACK_AMD_DEFINE_RESULT__ = function (React, jQuery, _, MailPoet, Hooks) {
|
26756 |
|
26757 |
-
var currentTime = window.mailpoet_current_time || '00:00'
|
26758 |
-
|
26759 |
-
timeOfDayItems = window.mailpoet_schedule_time_of_day
|
|
|
|
|
26760 |
|
26761 |
var datepickerTranslations = {
|
26762 |
closeText: MailPoet.I18n.t('close'),
|
@@ -26775,15 +26778,15 @@ webpackJsonp([0],[
|
|
26775 |
|
26776 |
onChange: function onChange(event) {
|
26777 |
// Swap display format to storage format
|
26778 |
-
var displayDate = event.target.value
|
26779 |
-
|
26780 |
|
26781 |
event.target.value = storageDate;
|
26782 |
this.props.onChange(event);
|
26783 |
},
|
26784 |
componentDidMount: function componentDidMount() {
|
26785 |
-
var $element = jQuery(this.refs.dateInput)
|
26786 |
-
|
26787 |
if ($element.datepicker) {
|
26788 |
// Override jQuery UI datepicker Date parsing and formatting
|
26789 |
jQuery.datepicker.parseDate = function (format, value) {
|
@@ -26952,8 +26955,8 @@ webpackJsonp([0],[
|
|
26952 |
});
|
26953 |
},
|
26954 |
handleValueChange: function handleValueChange(event) {
|
26955 |
-
var oldValue = this._getCurrentValue()
|
26956 |
-
|
26957 |
newValue[event.target.name] = event.target.value;
|
26958 |
|
26959 |
return this.props.onValueChange({
|
@@ -26978,7 +26981,7 @@ webpackJsonp([0],[
|
|
26978 |
};
|
26979 |
},
|
26980 |
render: function render() {
|
26981 |
-
var schedulingOptions;
|
26982 |
|
26983 |
if (this.isScheduled()) {
|
26984 |
schedulingOptions = React.createElement(
|
9473 |
if (this.props.onChange) {
|
9474 |
return this.props.onChange(e);
|
9475 |
} else {
|
9476 |
+
var item = this.state.item;
|
9477 |
+
var field = e.target.name;
|
9478 |
|
9479 |
item[field] = e.target.value;
|
9480 |
|
9487 |
render: function render() {
|
9488 |
var _this3 = this;
|
9489 |
|
9490 |
+
var errors = undefined;
|
9491 |
if (this.getErrors() !== undefined) {
|
9492 |
+
errors = this.getErrors().map(function (error, index) {
|
9493 |
return React.createElement(
|
9494 |
'p',
|
9495 |
{ key: 'error-' + index, className: 'mailpoet_error' },
|
26410 |
},
|
26411 |
MailPoet.I18n.t('delete')
|
26412 |
)
|
26413 |
+
);
|
26414 |
+
var thumbnail = '';
|
26415 |
|
26416 |
if (typeof template.thumbnail === 'string' && template.thumbnail.length > 0) {
|
26417 |
thumbnail = React.createElement(
|
26679 |
}
|
26680 |
},
|
26681 |
handleFormChange: function handleFormChange(e) {
|
26682 |
+
var item = this.state.item;
|
26683 |
+
var field = e.target.name;
|
26684 |
|
26685 |
item[field] = e.target.value;
|
26686 |
|
26755 |
|
26756 |
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2), __webpack_require__(273), __webpack_require__(278), __webpack_require__(274), __webpack_require__(422)], __WEBPACK_AMD_DEFINE_RESULT__ = function (React, jQuery, _, MailPoet, Hooks) {
|
26757 |
|
26758 |
+
var currentTime = window.mailpoet_current_time || '00:00';
|
26759 |
+
var defaultDateTime = window.mailpoet_current_date + ' ' + '00:00:00';
|
26760 |
+
var timeOfDayItems = window.mailpoet_schedule_time_of_day;
|
26761 |
+
var dateDisplayFormat = window.mailpoet_date_display_format;
|
26762 |
+
var dateStorageFormat = window.mailpoet_date_storage_format;
|
26763 |
|
26764 |
var datepickerTranslations = {
|
26765 |
closeText: MailPoet.I18n.t('close'),
|
26778 |
|
26779 |
onChange: function onChange(event) {
|
26780 |
// Swap display format to storage format
|
26781 |
+
var displayDate = event.target.value;
|
26782 |
+
var storageDate = this.getStorageDate(displayDate);
|
26783 |
|
26784 |
event.target.value = storageDate;
|
26785 |
this.props.onChange(event);
|
26786 |
},
|
26787 |
componentDidMount: function componentDidMount() {
|
26788 |
+
var $element = jQuery(this.refs.dateInput);
|
26789 |
+
var that = this;
|
26790 |
if ($element.datepicker) {
|
26791 |
// Override jQuery UI datepicker Date parsing and formatting
|
26792 |
jQuery.datepicker.parseDate = function (format, value) {
|
26955 |
});
|
26956 |
},
|
26957 |
handleValueChange: function handleValueChange(event) {
|
26958 |
+
var oldValue = this._getCurrentValue();
|
26959 |
+
var newValue = {};
|
26960 |
newValue[event.target.name] = event.target.value;
|
26961 |
|
26962 |
return this.props.onValueChange({
|
26981 |
};
|
26982 |
},
|
26983 |
render: function render() {
|
26984 |
+
var schedulingOptions = undefined;
|
26985 |
|
26986 |
if (this.isScheduled()) {
|
26987 |
schedulingOptions = React.createElement(
|
assets/js/{admin_vendor.927b0f96.js → admin_vendor.e019c409.js}
RENAMED
@@ -31207,7 +31207,7 @@ webpackJsonp([1],[
|
|
31207 |
|
31208 |
var classes = classNames('tablenav-pages', { 'one-page': this.props.count <= this.props.limit });
|
31209 |
|
31210 |
-
var numberOfItemsLabel;
|
31211 |
if (this.props.count == 1) {
|
31212 |
numberOfItemsLabel = MailPoet.I18n.t('numberOfItemsSingular');
|
31213 |
} else {
|
31207 |
|
31208 |
var classes = classNames('tablenav-pages', { 'one-page': this.props.count <= this.props.limit });
|
31209 |
|
31210 |
+
var numberOfItemsLabel = undefined;
|
31211 |
if (this.props.count == 1) {
|
31212 |
numberOfItemsLabel = MailPoet.I18n.t('numberOfItemsSingular');
|
31213 |
} else {
|
assets/js/manifest.json
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
{
|
2 |
"mp2migrator.js": "mp2migrator.f7fa3be5.js",
|
3 |
"public.js": "public.0e89cdab.js",
|
4 |
-
"admin.js": "admin.
|
5 |
-
"admin_vendor.js": "admin_vendor.
|
6 |
"form_editor.js": "form_editor.e0b22679.js",
|
7 |
"mailpoet.js": "mailpoet.0ebf4b66.js",
|
8 |
-
"newsletter_editor.js": "newsletter_editor.
|
9 |
-
"vendor.js": "vendor.
|
10 |
}
|
1 |
{
|
2 |
"mp2migrator.js": "mp2migrator.f7fa3be5.js",
|
3 |
"public.js": "public.0e89cdab.js",
|
4 |
+
"admin.js": "admin.f15adcea.js",
|
5 |
+
"admin_vendor.js": "admin_vendor.e019c409.js",
|
6 |
"form_editor.js": "form_editor.e0b22679.js",
|
7 |
"mailpoet.js": "mailpoet.0ebf4b66.js",
|
8 |
+
"newsletter_editor.js": "newsletter_editor.cec09cf2.js",
|
9 |
+
"vendor.js": "vendor.6d57818a.js"
|
10 |
}
|
assets/js/{newsletter_editor.7d386d8d.js → newsletter_editor.cec09cf2.js}
RENAMED
@@ -34229,6 +34229,7 @@ webpackJsonp([4],{
|
|
34229 |
modelEvents: {
|
34230 |
'change': 'render',
|
34231 |
'delete': 'deleteBlock',
|
|
|
34232 |
},
|
34233 |
events: {
|
34234 |
"mouseenter": "showTools",
|
@@ -34319,6 +34320,9 @@ webpackJsonp([4],{
|
|
34319 |
this.model.destroy();
|
34320 |
}.bind(this));
|
34321 |
},
|
|
|
|
|
|
|
34322 |
transitionIn: function() {
|
34323 |
return this._transition('slideDown', 'fadeIn', 'easeOut');
|
34324 |
},
|
@@ -34357,11 +34361,13 @@ webpackJsonp([4],{
|
|
34357 |
"click .mailpoet_delete_block_activate": "showDeletionConfirmation",
|
34358 |
"click .mailpoet_delete_block_cancel": "hideDeletionConfirmation",
|
34359 |
"click .mailpoet_delete_block_confirm": "deleteBlock",
|
|
|
34360 |
},
|
34361 |
// Markers of whether these particular tools will be used for this instance
|
34362 |
tools: {
|
34363 |
settings: true,
|
34364 |
delete: true,
|
|
|
34365 |
move: true,
|
34366 |
},
|
34367 |
getSettingsView: function() { return Module.BlockSettingsView; },
|
@@ -34398,6 +34404,11 @@ webpackJsonp([4],{
|
|
34398 |
this.model.trigger('delete');
|
34399 |
return false;
|
34400 |
},
|
|
|
|
|
|
|
|
|
|
|
34401 |
});
|
34402 |
|
34403 |
Module.BlockSettingsView = Marionette.View.extend({
|
@@ -34642,6 +34653,7 @@ webpackJsonp([4],{
|
|
34642 |
tools: {
|
34643 |
settings: this.renderOptions.depth === 1,
|
34644 |
delete: this.renderOptions.depth === 1,
|
|
|
34645 |
move: this.renderOptions.depth === 1,
|
34646 |
layerSelector: false,
|
34647 |
},
|
34229 |
modelEvents: {
|
34230 |
'change': 'render',
|
34231 |
'delete': 'deleteBlock',
|
34232 |
+
'duplicate': 'duplicateBlock',
|
34233 |
},
|
34234 |
events: {
|
34235 |
"mouseenter": "showTools",
|
34320 |
this.model.destroy();
|
34321 |
}.bind(this));
|
34322 |
},
|
34323 |
+
duplicateBlock: function() {
|
34324 |
+
this.model.collection.add(this.model.toJSON(), {at: this.model.collection.findIndex(this.model)});
|
34325 |
+
},
|
34326 |
transitionIn: function() {
|
34327 |
return this._transition('slideDown', 'fadeIn', 'easeOut');
|
34328 |
},
|
34361 |
"click .mailpoet_delete_block_activate": "showDeletionConfirmation",
|
34362 |
"click .mailpoet_delete_block_cancel": "hideDeletionConfirmation",
|
34363 |
"click .mailpoet_delete_block_confirm": "deleteBlock",
|
34364 |
+
"click .mailpoet_duplicate_block": "duplicateBlock",
|
34365 |
},
|
34366 |
// Markers of whether these particular tools will be used for this instance
|
34367 |
tools: {
|
34368 |
settings: true,
|
34369 |
delete: true,
|
34370 |
+
duplicate: true,
|
34371 |
move: true,
|
34372 |
},
|
34373 |
getSettingsView: function() { return Module.BlockSettingsView; },
|
34404 |
this.model.trigger('delete');
|
34405 |
return false;
|
34406 |
},
|
34407 |
+
duplicateBlock: function(event) {
|
34408 |
+
event.preventDefault();
|
34409 |
+
this.model.trigger('duplicate');
|
34410 |
+
return false;
|
34411 |
+
},
|
34412 |
});
|
34413 |
|
34414 |
Module.BlockSettingsView = Marionette.View.extend({
|
34653 |
tools: {
|
34654 |
settings: this.renderOptions.depth === 1,
|
34655 |
delete: this.renderOptions.depth === 1,
|
34656 |
+
duplicate: true,
|
34657 |
move: this.renderOptions.depth === 1,
|
34658 |
layerSelector: false,
|
34659 |
},
|
assets/js/{vendor.c136ccd7.js → vendor.6d57818a.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":"f15adcea","1":"e019c409","2":"e0b22679","3":"0ebf4b66","4":"cec09cf2"}[chunkId] + ".chunk.js";
|
80 |
/******/ head.appendChild(script);
|
81 |
/******/ }
|
82 |
/******/ };
|
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: 2017-07-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -365,8 +365,8 @@ msgstr ""
|
|
365 |
msgid "Export"
|
366 |
msgstr ""
|
367 |
|
368 |
-
#: lib/Config/Menu.php:222 lib/Config/Menu.php:223 views/update.html:
|
369 |
-
#: views/welcome.html:
|
370 |
msgid "Welcome"
|
371 |
msgstr ""
|
372 |
|
@@ -1023,6 +1023,12 @@ msgstr ""
|
|
1023 |
msgid "Daemon does not exist."
|
1024 |
msgstr ""
|
1025 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1026 |
#: lib/Form/Block/Base.php:10
|
1027 |
msgid "Please specify a valid email address."
|
1028 |
msgstr ""
|
@@ -1201,12 +1207,12 @@ msgid "Unsupported Amazon SES region"
|
|
1201 |
msgstr ""
|
1202 |
|
1203 |
#: lib/Mailer/Methods/AmazonSES.php:64 lib/Mailer/Methods/PHPMail.php:36
|
1204 |
-
#: lib/Mailer/Methods/SMTP.php:
|
1205 |
msgid "%s has returned an unknown error."
|
1206 |
msgstr ""
|
1207 |
|
1208 |
#: lib/Mailer/Methods/AmazonSES.php:66 lib/Mailer/Methods/PHPMail.php:38
|
1209 |
-
#: lib/Mailer/Methods/SMTP.php:
|
1210 |
msgid "Unprocessed subscriber"
|
1211 |
msgstr ""
|
1212 |
|
@@ -1227,12 +1233,12 @@ msgstr ""
|
|
1227 |
msgid "Please specify a type."
|
1228 |
msgstr ""
|
1229 |
|
1230 |
-
#: lib/Models/Form.php:93 lib/Models/Newsletter.php:
|
1231 |
#: lib/Models/Segment.php:133 lib/Models/Subscriber.php:342
|
1232 |
msgid "All"
|
1233 |
msgstr ""
|
1234 |
|
1235 |
-
#: lib/Models/Form.php:98 lib/Models/Newsletter.php:
|
1236 |
#: lib/Models/Segment.php:138 lib/Models/Subscriber.php:367 views/forms.html:66
|
1237 |
#: views/newsletters.html:77 views/segments.html:50
|
1238 |
#: views/subscribers/subscribers.html:37
|
@@ -1243,38 +1249,38 @@ msgstr ""
|
|
1243 |
msgid "Another record already exists. Please specify a different \"%1$s\"."
|
1244 |
msgstr ""
|
1245 |
|
1246 |
-
#: lib/Models/Newsletter.php:
|
1247 |
msgid "Deleted list"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
-
#: lib/Models/Newsletter.php:
|
1251 |
#: lib/Subscribers/ImportExport/Export/Export.php:170
|
1252 |
msgid "All Lists"
|
1253 |
msgstr ""
|
1254 |
|
1255 |
-
#: lib/Models/Newsletter.php:
|
1256 |
#: views/newsletter/templates/blocks/posts/settingsSelection.hbs:12
|
1257 |
msgid "Draft"
|
1258 |
msgstr ""
|
1259 |
|
1260 |
-
#: lib/Models/Newsletter.php:
|
1261 |
#: views/newsletter/templates/blocks/posts/settingsSelection.hbs:11
|
1262 |
msgid "Scheduled"
|
1263 |
msgstr ""
|
1264 |
|
1265 |
-
#: lib/Models/Newsletter.php:
|
1266 |
msgid "Sending"
|
1267 |
msgstr ""
|
1268 |
|
1269 |
-
#: lib/Models/Newsletter.php:
|
1270 |
msgid "Sent"
|
1271 |
msgstr ""
|
1272 |
|
1273 |
-
#: lib/Models/Newsletter.php:
|
1274 |
msgid "Active"
|
1275 |
msgstr ""
|
1276 |
|
1277 |
-
#: lib/Models/Newsletter.php:
|
1278 |
msgid "Not active"
|
1279 |
msgstr ""
|
1280 |
|
@@ -1631,19 +1637,19 @@ msgstr ""
|
|
1631 |
msgid "Accidentally unsubscribed?"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
-
#: lib/Twig/Functions.php:88 views/settings/mta.html:
|
1635 |
msgid "every minute"
|
1636 |
msgstr ""
|
1637 |
|
1638 |
-
#: lib/Twig/Functions.php:89 views/settings/mta.html:
|
1639 |
msgid "every %1$d minutes"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
-
#: lib/Twig/Functions.php:90 views/settings/mta.html:
|
1643 |
msgid "every hour"
|
1644 |
msgstr ""
|
1645 |
|
1646 |
-
#: lib/Twig/Functions.php:91 views/settings/mta.html:
|
1647 |
msgid "every %1$d hours"
|
1648 |
msgstr ""
|
1649 |
|
@@ -1837,7 +1843,7 @@ msgstr ""
|
|
1837 |
#: views/newsletter/templates/blocks/posts/settingsDisplayOptions.hbs:221
|
1838 |
#: views/premium.html:54 views/settings/advanced.html:90
|
1839 |
#: views/settings/advanced.html:130 views/settings/bounce.html:190
|
1840 |
-
#: views/settings/mta.html:
|
1841 |
#: views/subscribers/importExport/export.html:33
|
1842 |
#: views/subscribers/importExport/import/step2.html:63
|
1843 |
msgid "Yes"
|
@@ -1856,8 +1862,8 @@ msgstr ""
|
|
1856 |
#: views/newsletter/templates/blocks/posts/settingsDisplayOptions.hbs:227
|
1857 |
#: views/premium.html:60 views/premium.html:61 views/settings/advanced.html:101
|
1858 |
#: views/settings/advanced.html:141 views/settings/bounce.html:148
|
1859 |
-
#: views/settings/bounce.html:179 views/settings/mta.html:
|
1860 |
-
#: views/settings/mta.html:
|
1861 |
#: views/subscribers/importExport/export.html:38
|
1862 |
#: views/subscribers/importExport/import/step2.html:67
|
1863 |
msgid "No"
|
@@ -2158,7 +2164,9 @@ msgstr ""
|
|
2158 |
msgid "Edit"
|
2159 |
msgstr ""
|
2160 |
|
2161 |
-
#: views/forms.html:64
|
|
|
|
|
2162 |
msgid "Duplicate"
|
2163 |
msgstr ""
|
2164 |
|
@@ -2756,7 +2764,7 @@ msgstr ""
|
|
2756 |
msgid "Cancel deletion"
|
2757 |
msgstr ""
|
2758 |
|
2759 |
-
#: views/newsletter/templates/blocks/base/toolsGeneric.hbs:
|
2760 |
msgid "Drag to move"
|
2761 |
msgstr ""
|
2762 |
|
@@ -3286,8 +3294,8 @@ msgid ""
|
|
3286 |
"number."
|
3287 |
msgstr ""
|
3288 |
|
3289 |
-
#: views/newsletters.html:131 views/settings/mta.html:
|
3290 |
-
#: views/settings/mta.html:
|
3291 |
msgid "Activate"
|
3292 |
msgstr ""
|
3293 |
|
@@ -4129,11 +4137,11 @@ msgstr ""
|
|
4129 |
msgid "Hostname"
|
4130 |
msgstr ""
|
4131 |
|
4132 |
-
#: views/settings/bounce.html:50 views/settings/mta.html:
|
4133 |
msgid "Login"
|
4134 |
msgstr ""
|
4135 |
|
4136 |
-
#: views/settings/bounce.html:67 views/settings/mta.html:
|
4137 |
msgid "Password"
|
4138 |
msgstr ""
|
4139 |
|
@@ -4185,205 +4193,235 @@ msgstr ""
|
|
4185 |
msgid "Is it working? Try to connect"
|
4186 |
msgstr ""
|
4187 |
|
4188 |
-
#: views/settings/mta.html:
|
4189 |
msgid "You're now sending with MailPoet!"
|
4190 |
msgstr ""
|
4191 |
|
4192 |
-
#: views/settings/mta.html:
|
4193 |
msgid "Great, you're all set up. Your emails will now be sent quickly and reliably!"
|
4194 |
msgstr ""
|
4195 |
|
4196 |
-
#: views/settings/mta.html:
|
4197 |
msgid "Solve all of your sending problems!"
|
4198 |
msgstr ""
|
4199 |
|
4200 |
-
#: views/settings/mta.html:
|
4201 |
msgid ""
|
4202 |
"Let MailPoet send your emails and get the Premium features for as little as "
|
4203 |
"10 dollars or euros per month."
|
4204 |
msgstr ""
|
4205 |
|
4206 |
-
#: views/settings/mta.html:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4207 |
msgid "Find out more"
|
4208 |
msgstr ""
|
4209 |
|
4210 |
-
#: views/settings/mta.html:
|
4211 |
msgid "Activated"
|
4212 |
msgstr ""
|
4213 |
|
4214 |
-
#: views/settings/mta.html:
|
4215 |
msgid "Other"
|
4216 |
msgstr ""
|
4217 |
|
4218 |
-
#: views/settings/mta.html:
|
4219 |
msgid "Send with your website or third party"
|
4220 |
msgstr ""
|
4221 |
|
4222 |
-
#: views/settings/mta.html:
|
4223 |
msgid ""
|
4224 |
"Choose to send emails through your website (not recommended) or a third "
|
4225 |
"party sender."
|
4226 |
msgstr ""
|
4227 |
|
4228 |
#: views/settings/mta.html:125
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4229 |
msgid "Configure"
|
4230 |
msgstr ""
|
4231 |
|
4232 |
-
#: views/settings/mta.html:
|
4233 |
msgid ""
|
4234 |
"Need help to pick? [link]Check out the comparison table of sending "
|
4235 |
"methods[/link]."
|
4236 |
msgstr ""
|
4237 |
|
4238 |
-
#: views/settings/mta.html:
|
4239 |
msgid "Method"
|
4240 |
msgstr ""
|
4241 |
|
4242 |
-
#: views/settings/mta.html:
|
4243 |
msgid "Your web host / web server"
|
4244 |
msgstr ""
|
4245 |
|
4246 |
-
#: views/settings/mta.html:
|
4247 |
msgid "SMTP"
|
4248 |
msgstr ""
|
4249 |
|
4250 |
-
#: views/settings/mta.html:
|
4251 |
msgid "Select your provider"
|
4252 |
msgstr ""
|
4253 |
|
4254 |
-
#: views/settings/mta.html:
|
4255 |
msgid "Your web host"
|
4256 |
msgstr ""
|
4257 |
|
4258 |
-
#: views/settings/mta.html:
|
4259 |
msgid "Select your web host"
|
4260 |
msgstr ""
|
4261 |
|
4262 |
-
#: views/settings/mta.html:
|
4263 |
msgid "Sending frequency"
|
4264 |
msgstr ""
|
4265 |
|
4266 |
-
#: views/settings/mta.html:
|
4267 |
msgid "Recommended"
|
4268 |
msgstr ""
|
4269 |
|
4270 |
-
#: views/settings/mta.html:
|
4271 |
msgid "I'll set my own frequency"
|
4272 |
msgstr ""
|
4273 |
|
4274 |
-
#: views/settings/mta.html:
|
4275 |
msgid "emails"
|
4276 |
msgstr ""
|
4277 |
|
4278 |
-
#: views/settings/mta.html:
|
4279 |
msgid "recommended"
|
4280 |
msgstr ""
|
4281 |
|
4282 |
-
#: views/settings/mta.html:
|
4283 |
msgid ""
|
4284 |
"<strong>Warning!</strong> Sending more than the recommended amount of "
|
4285 |
"emails? You may break the terms of your web host or provider!"
|
4286 |
msgstr ""
|
4287 |
|
4288 |
-
#: views/settings/mta.html:
|
4289 |
msgid ""
|
4290 |
"Please ask your host for the maximum number of emails you are allowed to "
|
4291 |
"send per day."
|
4292 |
msgstr ""
|
4293 |
|
4294 |
-
#: views/settings/mta.html:
|
4295 |
msgid "SMTP Hostname"
|
4296 |
msgstr ""
|
4297 |
|
4298 |
-
#: views/settings/mta.html:
|
4299 |
msgid "e.g.: smtp.mydomain.com"
|
4300 |
msgstr ""
|
4301 |
|
4302 |
-
#: views/settings/mta.html:
|
4303 |
msgid "SMTP Port"
|
4304 |
msgstr ""
|
4305 |
|
4306 |
-
#: views/settings/mta.html:
|
4307 |
msgid "Region"
|
4308 |
msgstr ""
|
4309 |
|
4310 |
-
#: views/settings/mta.html:
|
4311 |
msgid "Access Key"
|
4312 |
msgstr ""
|
4313 |
|
4314 |
-
#: views/settings/mta.html:
|
4315 |
msgid "Secret Key"
|
4316 |
msgstr ""
|
4317 |
|
4318 |
-
#: views/settings/mta.html:
|
4319 |
-
msgid "Domain"
|
4320 |
-
msgstr ""
|
4321 |
-
|
4322 |
-
#: views/settings/mta.html:484
|
4323 |
msgid "API Key"
|
4324 |
msgstr ""
|
4325 |
|
4326 |
-
#: views/settings/mta.html:
|
4327 |
msgid "Secure Connection"
|
4328 |
msgstr ""
|
4329 |
|
4330 |
-
#: views/settings/mta.html:
|
4331 |
msgid "Authentication"
|
4332 |
msgstr ""
|
4333 |
|
4334 |
-
#: views/settings/mta.html:
|
4335 |
msgid ""
|
4336 |
"Leave this option set to Yes. Only a tiny portion of SMTP services prefer "
|
4337 |
"Authentication to be turned off."
|
4338 |
msgstr ""
|
4339 |
|
4340 |
-
#: views/settings/mta.html:
|
4341 |
msgid "SPF Signature (Highly recommended!)"
|
4342 |
msgstr ""
|
4343 |
|
4344 |
-
#: views/settings/mta.html:
|
4345 |
msgid ""
|
4346 |
"This improves your delivery rate by verifying that you're allowed to send "
|
4347 |
"emails from your domain."
|
4348 |
msgstr ""
|
4349 |
|
4350 |
-
#: views/settings/mta.html:
|
4351 |
msgid ""
|
4352 |
"SPF is set up in your DNS. Read your host's support documentation for more "
|
4353 |
"information."
|
4354 |
msgstr ""
|
4355 |
|
4356 |
-
#: views/settings/mta.html:
|
4357 |
msgid "Test the sending method"
|
4358 |
msgstr ""
|
4359 |
|
4360 |
-
#: views/settings/mta.html:
|
4361 |
msgid "Send a test email"
|
4362 |
msgstr ""
|
4363 |
|
4364 |
-
#: views/settings/mta.html:
|
4365 |
msgid "or Cancel"
|
4366 |
msgstr ""
|
4367 |
|
4368 |
-
#: views/settings/mta.html:
|
4369 |
msgid ""
|
4370 |
"The email could not be sent. Make sure the option \"Email notifications\" "
|
4371 |
"has a FROM email address in the Basics tab."
|
4372 |
msgstr ""
|
4373 |
|
4374 |
-
#: views/settings/mta.html:
|
4375 |
msgid "This is a Sending Method Test"
|
4376 |
msgstr ""
|
4377 |
|
4378 |
-
#: views/settings/mta.html:
|
4379 |
msgid "Yup, it works! You can start blasting away emails to the moon."
|
4380 |
msgstr ""
|
4381 |
|
4382 |
-
#: views/settings/mta.html:
|
4383 |
msgid "The email has been sent! Check your inbox."
|
4384 |
msgstr ""
|
4385 |
|
4386 |
-
#: views/settings/mta.html:
|
4387 |
msgid "You have selected an invalid sending method."
|
4388 |
msgstr ""
|
4389 |
|
@@ -4926,100 +4964,127 @@ msgid ""
|
|
4926 |
msgstr ""
|
4927 |
|
4928 |
#: views/update.html:13 views/welcome.html:22
|
4929 |
-
msgid "
|
4930 |
msgstr ""
|
4931 |
|
4932 |
#: views/update.html:15 views/welcome.html:24
|
4933 |
msgid ""
|
4934 |
-
"
|
4935 |
-
"
|
4936 |
-
"help!"
|
4937 |
msgstr ""
|
4938 |
|
4939 |
-
#: views/update.html:
|
4940 |
msgid "What's New"
|
4941 |
msgstr ""
|
4942 |
|
4943 |
-
#: views/update.html:
|
4944 |
msgid "List of Changes"
|
4945 |
msgstr ""
|
4946 |
|
4947 |
-
#: views/update.html:
|
4948 |
msgid "See readme.txt for a changelog."
|
4949 |
msgstr ""
|
4950 |
|
4951 |
-
#: views/update.html:
|
4952 |
-
msgid "
|
4953 |
msgstr ""
|
4954 |
|
4955 |
-
#: views/update.html:
|
4956 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4957 |
msgstr ""
|
4958 |
|
4959 |
-
#: views/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4960 |
msgid "MailPoet Logo"
|
4961 |
msgstr ""
|
4962 |
|
4963 |
-
#: views/welcome.html:
|
4964 |
msgid "What's new"
|
4965 |
msgstr ""
|
4966 |
|
4967 |
-
#: views/welcome.html:
|
4968 |
msgid "Want to Make MailPoet Even Better?"
|
4969 |
msgstr ""
|
4970 |
|
4971 |
-
#: views/welcome.html:
|
4972 |
msgid "We Need Your Feedback!"
|
4973 |
msgstr ""
|
4974 |
|
4975 |
-
#: views/welcome.html:
|
4976 |
msgid ""
|
4977 |
"As a beta tester, you have a very important job: to tell us what you think "
|
4978 |
"about this new version. If you love it, tell us! If you hate it, let us "
|
4979 |
"know! Any and all feedback is useful."
|
4980 |
msgstr ""
|
4981 |
|
4982 |
-
#: views/welcome.html:
|
4983 |
msgid ""
|
4984 |
"To get in touch with us, simply click on the blue circle in the bottom "
|
4985 |
"right corner of your screen. This button is visible on all MailPoet pages "
|
4986 |
"on your WordPress dashboard."
|
4987 |
msgstr ""
|
4988 |
|
4989 |
-
#: views/welcome.html:
|
4990 |
msgid "Sharing is Caring"
|
4991 |
msgstr ""
|
4992 |
|
4993 |
-
#: views/welcome.html:
|
4994 |
msgid ""
|
4995 |
"By sharing your data <i>anonymously</i> with us, you can help us understand "
|
4996 |
"<i>how people use MailPoet</i> and <i>what sort of features they like and "
|
4997 |
"don't like</i>."
|
4998 |
msgstr ""
|
4999 |
|
5000 |
-
#: views/welcome.html:
|
5001 |
msgid "Yes, I want to help!"
|
5002 |
msgstr ""
|
5003 |
|
5004 |
-
#: views/welcome.html:
|
5005 |
msgid "Subscribe To Our Newsletter"
|
5006 |
msgstr ""
|
5007 |
|
5008 |
-
#: views/welcome.html:
|
5009 |
msgid "About once a month, we send out a pretty cool newsletter ourselves."
|
5010 |
msgstr ""
|
5011 |
|
5012 |
-
#: views/welcome.html:
|
5013 |
msgid ""
|
5014 |
"Sign up to get a curated selection of awesome links, tips and tricks for "
|
5015 |
"using MailPoet, special offers, and important plugin updates!"
|
5016 |
msgstr ""
|
5017 |
|
5018 |
-
#: views/welcome.html:
|
5019 |
msgid "Learn the Ropes"
|
5020 |
msgstr ""
|
5021 |
|
5022 |
-
#: views/welcome.html:
|
5023 |
msgid ""
|
5024 |
"New to MailPoet? Check out our brand new email course. Over the span of 3 "
|
5025 |
"weeks, we'll teach you how to create and send your first MailPoet email "
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: \n"
|
6 |
"Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
|
7 |
+
"POT-Creation-Date: 2017-07-18 10:51:01+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
365 |
msgid "Export"
|
366 |
msgstr ""
|
367 |
|
368 |
+
#: lib/Config/Menu.php:222 lib/Config/Menu.php:223 views/update.html:23
|
369 |
+
#: views/welcome.html:32
|
370 |
msgid "Welcome"
|
371 |
msgstr ""
|
372 |
|
1023 |
msgid "Daemon does not exist."
|
1024 |
msgstr ""
|
1025 |
|
1026 |
+
#: lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php:95
|
1027 |
+
msgid ""
|
1028 |
+
"There was an error processing your newsletter during sending. If possible, "
|
1029 |
+
"please contact us and report this issue."
|
1030 |
+
msgstr ""
|
1031 |
+
|
1032 |
#: lib/Form/Block/Base.php:10
|
1033 |
msgid "Please specify a valid email address."
|
1034 |
msgstr ""
|
1207 |
msgstr ""
|
1208 |
|
1209 |
#: lib/Mailer/Methods/AmazonSES.php:64 lib/Mailer/Methods/PHPMail.php:36
|
1210 |
+
#: lib/Mailer/Methods/SMTP.php:120 lib/Mailer/Methods/SendGrid.php:32
|
1211 |
msgid "%s has returned an unknown error."
|
1212 |
msgstr ""
|
1213 |
|
1214 |
#: lib/Mailer/Methods/AmazonSES.php:66 lib/Mailer/Methods/PHPMail.php:38
|
1215 |
+
#: lib/Mailer/Methods/SMTP.php:123 lib/Mailer/Methods/SendGrid.php:34
|
1216 |
msgid "Unprocessed subscriber"
|
1217 |
msgstr ""
|
1218 |
|
1233 |
msgid "Please specify a type."
|
1234 |
msgstr ""
|
1235 |
|
1236 |
+
#: lib/Models/Form.php:93 lib/Models/Newsletter.php:649
|
1237 |
#: lib/Models/Segment.php:133 lib/Models/Subscriber.php:342
|
1238 |
msgid "All"
|
1239 |
msgstr ""
|
1240 |
|
1241 |
+
#: lib/Models/Form.php:98 lib/Models/Newsletter.php:719
|
1242 |
#: lib/Models/Segment.php:138 lib/Models/Subscriber.php:367 views/forms.html:66
|
1243 |
#: views/newsletters.html:77 views/segments.html:50
|
1244 |
#: views/subscribers/subscribers.html:37
|
1249 |
msgid "Another record already exists. Please specify a different \"%1$s\"."
|
1250 |
msgstr ""
|
1251 |
|
1252 |
+
#: lib/Models/Newsletter.php:391
|
1253 |
msgid "Deleted list"
|
1254 |
msgstr ""
|
1255 |
|
1256 |
+
#: lib/Models/Newsletter.php:550 lib/Models/Subscriber.php:278
|
1257 |
#: lib/Subscribers/ImportExport/Export/Export.php:170
|
1258 |
msgid "All Lists"
|
1259 |
msgstr ""
|
1260 |
|
1261 |
+
#: lib/Models/Newsletter.php:661
|
1262 |
#: views/newsletter/templates/blocks/posts/settingsSelection.hbs:12
|
1263 |
msgid "Draft"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
+
#: lib/Models/Newsletter.php:669
|
1267 |
#: views/newsletter/templates/blocks/posts/settingsSelection.hbs:11
|
1268 |
msgid "Scheduled"
|
1269 |
msgstr ""
|
1270 |
|
1271 |
+
#: lib/Models/Newsletter.php:677
|
1272 |
msgid "Sending"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
+
#: lib/Models/Newsletter.php:685
|
1276 |
msgid "Sent"
|
1277 |
msgstr ""
|
1278 |
|
1279 |
+
#: lib/Models/Newsletter.php:699 views/newsletters.html:85
|
1280 |
msgid "Active"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
+
#: lib/Models/Newsletter.php:707
|
1284 |
msgid "Not active"
|
1285 |
msgstr ""
|
1286 |
|
1637 |
msgid "Accidentally unsubscribed?"
|
1638 |
msgstr ""
|
1639 |
|
1640 |
+
#: lib/Twig/Functions.php:88 views/settings/mta.html:1055
|
1641 |
msgid "every minute"
|
1642 |
msgstr ""
|
1643 |
|
1644 |
+
#: lib/Twig/Functions.php:89 views/settings/mta.html:1056
|
1645 |
msgid "every %1$d minutes"
|
1646 |
msgstr ""
|
1647 |
|
1648 |
+
#: lib/Twig/Functions.php:90 views/settings/mta.html:1057
|
1649 |
msgid "every hour"
|
1650 |
msgstr ""
|
1651 |
|
1652 |
+
#: lib/Twig/Functions.php:91 views/settings/mta.html:1058
|
1653 |
msgid "every %1$d hours"
|
1654 |
msgstr ""
|
1655 |
|
1843 |
#: views/newsletter/templates/blocks/posts/settingsDisplayOptions.hbs:221
|
1844 |
#: views/premium.html:54 views/settings/advanced.html:90
|
1845 |
#: views/settings/advanced.html:130 views/settings/bounce.html:190
|
1846 |
+
#: views/settings/mta.html:589 views/settings/signup.html:34
|
1847 |
#: views/subscribers/importExport/export.html:33
|
1848 |
#: views/subscribers/importExport/import/step2.html:63
|
1849 |
msgid "Yes"
|
1862 |
#: views/newsletter/templates/blocks/posts/settingsDisplayOptions.hbs:227
|
1863 |
#: views/premium.html:60 views/premium.html:61 views/settings/advanced.html:101
|
1864 |
#: views/settings/advanced.html:141 views/settings/bounce.html:148
|
1865 |
+
#: views/settings/bounce.html:179 views/settings/mta.html:546
|
1866 |
+
#: views/settings/mta.html:600 views/settings/signup.html:46
|
1867 |
#: views/subscribers/importExport/export.html:38
|
1868 |
#: views/subscribers/importExport/import/step2.html:67
|
1869 |
msgid "No"
|
2164 |
msgid "Edit"
|
2165 |
msgstr ""
|
2166 |
|
2167 |
+
#: views/forms.html:64
|
2168 |
+
#: views/newsletter/templates/blocks/base/toolsGeneric.hbs:6
|
2169 |
+
#: views/newsletters.html:80 views/segments.html:41
|
2170 |
msgid "Duplicate"
|
2171 |
msgstr ""
|
2172 |
|
2764 |
msgid "Cancel deletion"
|
2765 |
msgstr ""
|
2766 |
|
2767 |
+
#: views/newsletter/templates/blocks/base/toolsGeneric.hbs:7
|
2768 |
msgid "Drag to move"
|
2769 |
msgstr ""
|
2770 |
|
3294 |
"number."
|
3295 |
msgstr ""
|
3296 |
|
3297 |
+
#: views/newsletters.html:131 views/settings/mta.html:109
|
3298 |
+
#: views/settings/mta.html:655
|
3299 |
msgid "Activate"
|
3300 |
msgstr ""
|
3301 |
|
4137 |
msgid "Hostname"
|
4138 |
msgstr ""
|
4139 |
|
4140 |
+
#: views/settings/bounce.html:50 views/settings/mta.html:495
|
4141 |
msgid "Login"
|
4142 |
msgstr ""
|
4143 |
|
4144 |
+
#: views/settings/bounce.html:67 views/settings/mta.html:518
|
4145 |
msgid "Password"
|
4146 |
msgstr ""
|
4147 |
|
4193 |
msgid "Is it working? Try to connect"
|
4194 |
msgstr ""
|
4195 |
|
4196 |
+
#: views/settings/mta.html:76
|
4197 |
msgid "You're now sending with MailPoet!"
|
4198 |
msgstr ""
|
4199 |
|
4200 |
+
#: views/settings/mta.html:78
|
4201 |
msgid "Great, you're all set up. Your emails will now be sent quickly and reliably!"
|
4202 |
msgstr ""
|
4203 |
|
4204 |
+
#: views/settings/mta.html:85
|
4205 |
msgid "Solve all of your sending problems!"
|
4206 |
msgstr ""
|
4207 |
|
4208 |
+
#: views/settings/mta.html:87
|
4209 |
msgid ""
|
4210 |
"Let MailPoet send your emails and get the Premium features for as little as "
|
4211 |
"10 dollars or euros per month."
|
4212 |
msgstr ""
|
4213 |
|
4214 |
+
#: views/settings/mta.html:89
|
4215 |
+
msgid "Reach the inbox, not the spam box."
|
4216 |
+
msgstr ""
|
4217 |
+
|
4218 |
+
#: views/settings/mta.html:90
|
4219 |
+
msgid "Send emails up to 20 times faster than other sending methods."
|
4220 |
+
msgstr ""
|
4221 |
+
|
4222 |
+
#: views/settings/mta.html:91
|
4223 |
+
msgid "SPF & DKIM signatures are already set up! No configuration required."
|
4224 |
+
msgstr ""
|
4225 |
+
|
4226 |
+
#: views/settings/mta.html:92
|
4227 |
+
msgid ""
|
4228 |
+
"Automatically remove invalid and bounced addresses (bounce handling) to "
|
4229 |
+
"keep your lists clean."
|
4230 |
+
msgstr ""
|
4231 |
+
|
4232 |
+
#: views/settings/mta.html:98 views/welcome.html:53
|
4233 |
msgid "Find out more"
|
4234 |
msgstr ""
|
4235 |
|
4236 |
+
#: views/settings/mta.html:102 views/settings/mta.html:133
|
4237 |
msgid "Activated"
|
4238 |
msgstr ""
|
4239 |
|
4240 |
+
#: views/settings/mta.html:119
|
4241 |
msgid "Other"
|
4242 |
msgstr ""
|
4243 |
|
4244 |
+
#: views/settings/mta.html:121
|
4245 |
msgid "Send with your website or third party"
|
4246 |
msgstr ""
|
4247 |
|
4248 |
+
#: views/settings/mta.html:123
|
4249 |
msgid ""
|
4250 |
"Choose to send emails through your website (not recommended) or a third "
|
4251 |
"party sender."
|
4252 |
msgstr ""
|
4253 |
|
4254 |
#: views/settings/mta.html:125
|
4255 |
+
msgid "You\\'ll probably end up in spam."
|
4256 |
+
msgstr ""
|
4257 |
+
|
4258 |
+
#: views/settings/mta.html:126
|
4259 |
+
msgid "Sending speed is limited by your web host."
|
4260 |
+
msgstr ""
|
4261 |
+
|
4262 |
+
#: views/settings/mta.html:127
|
4263 |
+
msgid "Manual configuration of SPF and DKIM required."
|
4264 |
+
msgstr ""
|
4265 |
+
|
4266 |
+
#: views/settings/mta.html:128
|
4267 |
+
msgid "Bounce handling is available, but only with an extra add-on."
|
4268 |
+
msgstr ""
|
4269 |
+
|
4270 |
+
#: views/settings/mta.html:137
|
4271 |
msgid "Configure"
|
4272 |
msgstr ""
|
4273 |
|
4274 |
+
#: views/settings/mta.html:144
|
4275 |
msgid ""
|
4276 |
"Need help to pick? [link]Check out the comparison table of sending "
|
4277 |
"methods[/link]."
|
4278 |
msgstr ""
|
4279 |
|
4280 |
+
#: views/settings/mta.html:158
|
4281 |
msgid "Method"
|
4282 |
msgstr ""
|
4283 |
|
4284 |
+
#: views/settings/mta.html:168
|
4285 |
msgid "Your web host / web server"
|
4286 |
msgstr ""
|
4287 |
|
4288 |
+
#: views/settings/mta.html:177
|
4289 |
msgid "SMTP"
|
4290 |
msgstr ""
|
4291 |
|
4292 |
+
#: views/settings/mta.html:180
|
4293 |
msgid "Select your provider"
|
4294 |
msgstr ""
|
4295 |
|
4296 |
+
#: views/settings/mta.html:205
|
4297 |
msgid "Your web host"
|
4298 |
msgstr ""
|
4299 |
|
4300 |
+
#: views/settings/mta.html:221
|
4301 |
msgid "Select your web host"
|
4302 |
msgstr ""
|
4303 |
|
4304 |
+
#: views/settings/mta.html:244
|
4305 |
msgid "Sending frequency"
|
4306 |
msgstr ""
|
4307 |
|
4308 |
+
#: views/settings/mta.html:255
|
4309 |
msgid "Recommended"
|
4310 |
msgstr ""
|
4311 |
|
4312 |
+
#: views/settings/mta.html:264
|
4313 |
msgid "I'll set my own frequency"
|
4314 |
msgstr ""
|
4315 |
|
4316 |
+
#: views/settings/mta.html:288
|
4317 |
msgid "emails"
|
4318 |
msgstr ""
|
4319 |
|
4320 |
+
#: views/settings/mta.html:305
|
4321 |
msgid "recommended"
|
4322 |
msgstr ""
|
4323 |
|
4324 |
+
#: views/settings/mta.html:314
|
4325 |
msgid ""
|
4326 |
"<strong>Warning!</strong> Sending more than the recommended amount of "
|
4327 |
"emails? You may break the terms of your web host or provider!"
|
4328 |
msgstr ""
|
4329 |
|
4330 |
+
#: views/settings/mta.html:316
|
4331 |
msgid ""
|
4332 |
"Please ask your host for the maximum number of emails you are allowed to "
|
4333 |
"send per day."
|
4334 |
msgstr ""
|
4335 |
|
4336 |
+
#: views/settings/mta.html:330
|
4337 |
msgid "SMTP Hostname"
|
4338 |
msgstr ""
|
4339 |
|
4340 |
+
#: views/settings/mta.html:333
|
4341 |
msgid "e.g.: smtp.mydomain.com"
|
4342 |
msgstr ""
|
4343 |
|
4344 |
+
#: views/settings/mta.html:355
|
4345 |
msgid "SMTP Port"
|
4346 |
msgstr ""
|
4347 |
|
4348 |
+
#: views/settings/mta.html:382
|
4349 |
msgid "Region"
|
4350 |
msgstr ""
|
4351 |
|
4352 |
+
#: views/settings/mta.html:417
|
4353 |
msgid "Access Key"
|
4354 |
msgstr ""
|
4355 |
|
4356 |
+
#: views/settings/mta.html:444
|
4357 |
msgid "Secret Key"
|
4358 |
msgstr ""
|
4359 |
|
4360 |
+
#: views/settings/mta.html:471
|
|
|
|
|
|
|
|
|
4361 |
msgid "API Key"
|
4362 |
msgstr ""
|
4363 |
|
4364 |
+
#: views/settings/mta.html:541
|
4365 |
msgid "Secure Connection"
|
4366 |
msgstr ""
|
4367 |
|
4368 |
+
#: views/settings/mta.html:572
|
4369 |
msgid "Authentication"
|
4370 |
msgstr ""
|
4371 |
|
4372 |
+
#: views/settings/mta.html:575
|
4373 |
msgid ""
|
4374 |
"Leave this option set to Yes. Only a tiny portion of SMTP services prefer "
|
4375 |
"Authentication to be turned off."
|
4376 |
msgstr ""
|
4377 |
|
4378 |
+
#: views/settings/mta.html:614
|
4379 |
msgid "SPF Signature (Highly recommended!)"
|
4380 |
msgstr ""
|
4381 |
|
4382 |
+
#: views/settings/mta.html:617
|
4383 |
msgid ""
|
4384 |
"This improves your delivery rate by verifying that you're allowed to send "
|
4385 |
"emails from your domain."
|
4386 |
msgstr ""
|
4387 |
|
4388 |
+
#: views/settings/mta.html:622
|
4389 |
msgid ""
|
4390 |
"SPF is set up in your DNS. Read your host's support documentation for more "
|
4391 |
"information."
|
4392 |
msgstr ""
|
4393 |
|
4394 |
+
#: views/settings/mta.html:630
|
4395 |
msgid "Test the sending method"
|
4396 |
msgstr ""
|
4397 |
|
4398 |
+
#: views/settings/mta.html:644
|
4399 |
msgid "Send a test email"
|
4400 |
msgstr ""
|
4401 |
|
4402 |
+
#: views/settings/mta.html:660
|
4403 |
msgid "or Cancel"
|
4404 |
msgstr ""
|
4405 |
|
4406 |
+
#: views/settings/mta.html:699
|
4407 |
msgid ""
|
4408 |
"The email could not be sent. Make sure the option \"Email notifications\" "
|
4409 |
"has a FROM email address in the Basics tab."
|
4410 |
msgstr ""
|
4411 |
|
4412 |
+
#: views/settings/mta.html:712
|
4413 |
msgid "This is a Sending Method Test"
|
4414 |
msgstr ""
|
4415 |
|
4416 |
+
#: views/settings/mta.html:714 views/settings/mta.html:715
|
4417 |
msgid "Yup, it works! You can start blasting away emails to the moon."
|
4418 |
msgstr ""
|
4419 |
|
4420 |
+
#: views/settings/mta.html:724
|
4421 |
msgid "The email has been sent! Check your inbox."
|
4422 |
msgstr ""
|
4423 |
|
4424 |
+
#: views/settings/mta.html:768
|
4425 |
msgid "You have selected an invalid sending method."
|
4426 |
msgstr ""
|
4427 |
|
4964 |
msgstr ""
|
4965 |
|
4966 |
#: views/update.html:13 views/welcome.html:22
|
4967 |
+
msgid "Greetings, humans."
|
4968 |
msgstr ""
|
4969 |
|
4970 |
#: views/update.html:15 views/welcome.html:24
|
4971 |
msgid ""
|
4972 |
+
"Thanks for using MailPoet! We really appreciate all of your love, "
|
4973 |
+
"affection, [link]and (good) plugin reviews.[/link]"
|
|
|
4974 |
msgstr ""
|
4975 |
|
4976 |
+
#: views/update.html:24
|
4977 |
msgid "What's New"
|
4978 |
msgstr ""
|
4979 |
|
4980 |
+
#: views/update.html:28
|
4981 |
msgid "List of Changes"
|
4982 |
msgstr ""
|
4983 |
|
4984 |
+
#: views/update.html:39
|
4985 |
msgid "See readme.txt for a changelog."
|
4986 |
msgstr ""
|
4987 |
|
4988 |
+
#: views/update.html:41
|
4989 |
+
msgid "View all changes"
|
4990 |
msgstr ""
|
4991 |
|
4992 |
+
#: views/update.html:48
|
4993 |
+
msgid "Do Your Part to Make MailPoet Better"
|
4994 |
+
msgstr ""
|
4995 |
+
|
4996 |
+
#: views/update.html:53
|
4997 |
+
msgid "Yes, share my data anonymously."
|
4998 |
+
msgstr ""
|
4999 |
+
|
5000 |
+
#: views/update.html:56
|
5001 |
+
msgid ""
|
5002 |
+
"By sharing your data with us, you can help us understand what our users "
|
5003 |
+
"like (and don't like)."
|
5004 |
+
msgstr ""
|
5005 |
+
|
5006 |
+
#: views/update.html:57
|
5007 |
+
msgid "We use it to prioritize and develop new plugin features."
|
5008 |
msgstr ""
|
5009 |
|
5010 |
+
#: views/update.html:58
|
5011 |
+
msgid ""
|
5012 |
+
"Share your data to help shape the future of MailPoet! [link]Read "
|
5013 |
+
"more.[/link]"
|
5014 |
+
msgstr ""
|
5015 |
+
|
5016 |
+
#: views/update.html:68
|
5017 |
+
msgid "Care to Give Your Opinion?"
|
5018 |
+
msgstr ""
|
5019 |
+
|
5020 |
+
#: views/update.html:77 views/welcome.html:88
|
5021 |
+
msgid "Awesome! Now, take me to MailPoet"
|
5022 |
+
msgstr ""
|
5023 |
+
|
5024 |
+
#: views/welcome.html:29
|
5025 |
msgid "MailPoet Logo"
|
5026 |
msgstr ""
|
5027 |
|
5028 |
+
#: views/welcome.html:33
|
5029 |
msgid "What's new"
|
5030 |
msgstr ""
|
5031 |
|
5032 |
+
#: views/welcome.html:45
|
5033 |
msgid "Want to Make MailPoet Even Better?"
|
5034 |
msgstr ""
|
5035 |
|
5036 |
+
#: views/welcome.html:47
|
5037 |
msgid "We Need Your Feedback!"
|
5038 |
msgstr ""
|
5039 |
|
5040 |
+
#: views/welcome.html:48
|
5041 |
msgid ""
|
5042 |
"As a beta tester, you have a very important job: to tell us what you think "
|
5043 |
"about this new version. If you love it, tell us! If you hate it, let us "
|
5044 |
"know! Any and all feedback is useful."
|
5045 |
msgstr ""
|
5046 |
|
5047 |
+
#: views/welcome.html:49
|
5048 |
msgid ""
|
5049 |
"To get in touch with us, simply click on the blue circle in the bottom "
|
5050 |
"right corner of your screen. This button is visible on all MailPoet pages "
|
5051 |
"on your WordPress dashboard."
|
5052 |
msgstr ""
|
5053 |
|
5054 |
+
#: views/welcome.html:52
|
5055 |
msgid "Sharing is Caring"
|
5056 |
msgstr ""
|
5057 |
|
5058 |
+
#: views/welcome.html:53
|
5059 |
msgid ""
|
5060 |
"By sharing your data <i>anonymously</i> with us, you can help us understand "
|
5061 |
"<i>how people use MailPoet</i> and <i>what sort of features they like and "
|
5062 |
"don't like</i>."
|
5063 |
msgstr ""
|
5064 |
|
5065 |
+
#: views/welcome.html:58
|
5066 |
msgid "Yes, I want to help!"
|
5067 |
msgstr ""
|
5068 |
|
5069 |
+
#: views/welcome.html:68 views/welcome.html:72
|
5070 |
msgid "Subscribe To Our Newsletter"
|
5071 |
msgstr ""
|
5072 |
|
5073 |
+
#: views/welcome.html:69
|
5074 |
msgid "About once a month, we send out a pretty cool newsletter ourselves."
|
5075 |
msgstr ""
|
5076 |
|
5077 |
+
#: views/welcome.html:70
|
5078 |
msgid ""
|
5079 |
"Sign up to get a curated selection of awesome links, tips and tricks for "
|
5080 |
"using MailPoet, special offers, and important plugin updates!"
|
5081 |
msgstr ""
|
5082 |
|
5083 |
+
#: views/welcome.html:76
|
5084 |
msgid "Learn the Ropes"
|
5085 |
msgstr ""
|
5086 |
|
5087 |
+
#: views/welcome.html:77
|
5088 |
msgid ""
|
5089 |
"New to MailPoet? Check out our brand new email course. Over the span of 3 "
|
5090 |
"weeks, we'll teach you how to create and send your first MailPoet email "
|
lib/Config/Menu.php
CHANGED
@@ -340,7 +340,7 @@ class Menu {
|
|
340 |
|
341 |
$readme_file = Env::$path . '/readme.txt';
|
342 |
if(is_readable($readme_file)) {
|
343 |
-
$changelog = Readme::parseChangelog(file_get_contents($readme_file),
|
344 |
if($changelog) {
|
345 |
$data['changelog'] = $changelog;
|
346 |
}
|
340 |
|
341 |
$readme_file = Env::$path . '/readme.txt';
|
342 |
if(is_readable($readme_file)) {
|
343 |
+
$changelog = Readme::parseChangelog(file_get_contents($readme_file), 1);
|
344 |
if($changelog) {
|
345 |
$data['changelog'] = $changelog;
|
346 |
}
|
lib/Config/Populator.php
CHANGED
@@ -340,7 +340,7 @@ class Populator {
|
|
340 |
if(!version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.32', '<=')) {
|
341 |
// Data conversion should only be performed only once, when migrating from
|
342 |
// older version
|
343 |
-
return;
|
344 |
}
|
345 |
|
346 |
$source_charset = $wpdb->get_var('SELECT @@GLOBAL.character_set_connection');
|
@@ -389,6 +389,8 @@ class Populator {
|
|
389 |
implode(' AND ', $where_query)
|
390 |
));
|
391 |
}
|
|
|
|
|
392 |
}
|
393 |
|
394 |
/*
|
@@ -401,7 +403,7 @@ class Populator {
|
|
401 |
|
402 |
// perform once for versions below 3.0.0-beta.36.2.1
|
403 |
if(version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.36.2.1', '>=')) {
|
404 |
-
return;
|
405 |
}
|
406 |
|
407 |
$column_list = array(
|
@@ -439,6 +441,8 @@ class Populator {
|
|
439 |
MP_SENDING_QUEUES_TABLE,
|
440 |
'`type` IN("' . join('" , "', $task_types) . '")'
|
441 |
));
|
|
|
|
|
442 |
}
|
443 |
|
444 |
/*
|
@@ -452,7 +456,7 @@ class Populator {
|
|
452 |
|
453 |
// perform once for versions below 3.0.0-beta.36.2.1
|
454 |
if(version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.36.2.1', '>=')) {
|
455 |
-
return;
|
456 |
}
|
457 |
|
458 |
$query = "UPDATE `%s` newsletters JOIN `%s` queues ON newsletters.id = queues.newsletter_id SET newsletters.sent_at = queues.processed_at";
|
@@ -461,5 +465,7 @@ class Populator {
|
|
461 |
Newsletter::$_table,
|
462 |
SendingQueue::$_table
|
463 |
));
|
|
|
|
|
464 |
}
|
465 |
}
|
340 |
if(!version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.32', '<=')) {
|
341 |
// Data conversion should only be performed only once, when migrating from
|
342 |
// older version
|
343 |
+
return false;
|
344 |
}
|
345 |
|
346 |
$source_charset = $wpdb->get_var('SELECT @@GLOBAL.character_set_connection');
|
389 |
implode(' AND ', $where_query)
|
390 |
));
|
391 |
}
|
392 |
+
|
393 |
+
return true;
|
394 |
}
|
395 |
|
396 |
/*
|
403 |
|
404 |
// perform once for versions below 3.0.0-beta.36.2.1
|
405 |
if(version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.36.2.1', '>=')) {
|
406 |
+
return false;
|
407 |
}
|
408 |
|
409 |
$column_list = array(
|
441 |
MP_SENDING_QUEUES_TABLE,
|
442 |
'`type` IN("' . join('" , "', $task_types) . '")'
|
443 |
));
|
444 |
+
|
445 |
+
return true;
|
446 |
}
|
447 |
|
448 |
/*
|
456 |
|
457 |
// perform once for versions below 3.0.0-beta.36.2.1
|
458 |
if(version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.36.2.1', '>=')) {
|
459 |
+
return false;
|
460 |
}
|
461 |
|
462 |
$query = "UPDATE `%s` newsletters JOIN `%s` queues ON newsletters.id = queues.newsletter_id SET newsletters.sent_at = queues.processed_at";
|
465 |
Newsletter::$_table,
|
466 |
SendingQueue::$_table
|
467 |
));
|
468 |
+
|
469 |
+
return true;
|
470 |
}
|
471 |
}
|
lib/Cron/Workers/SendingQueue/SendingQueue.php
CHANGED
@@ -157,7 +157,7 @@ class SendingQueue {
|
|
157 |
);
|
158 |
// log error message and schedule retry/pause sending
|
159 |
if($send_result['response'] === false) {
|
160 |
-
MailerLog::
|
161 |
$send_result['operation'],
|
162 |
$send_result['error_message']
|
163 |
);
|
157 |
);
|
158 |
// log error message and schedule retry/pause sending
|
159 |
if($send_result['response'] === false) {
|
160 |
+
MailerLog::processError(
|
161 |
$send_result['operation'],
|
162 |
$send_result['error_message']
|
163 |
);
|
lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
CHANGED
@@ -4,6 +4,7 @@ namespace MailPoet\Cron\Workers\SendingQueue\Tasks;
|
|
4 |
use MailPoet\Cron\Workers\SendingQueue\Tasks\Links as LinksTask;
|
5 |
use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask;
|
6 |
use MailPoet\Cron\Workers\SendingQueue\Tasks\Shortcodes as ShortcodesTask;
|
|
|
7 |
use MailPoet\Models\Newsletter as NewsletterModel;
|
8 |
use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel;
|
9 |
use MailPoet\Models\Setting;
|
@@ -88,6 +89,12 @@ class Newsletter {
|
|
88 |
$queue->newsletter_rendered_subject = Shortcodes::process($newsletter->subject, $newsletter, null, $queue);
|
89 |
$queue->newsletter_rendered_body = $rendered_newsletter;
|
90 |
$queue->save();
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
return $newsletter;
|
92 |
}
|
93 |
|
4 |
use MailPoet\Cron\Workers\SendingQueue\Tasks\Links as LinksTask;
|
5 |
use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask;
|
6 |
use MailPoet\Cron\Workers\SendingQueue\Tasks\Shortcodes as ShortcodesTask;
|
7 |
+
use MailPoet\Mailer\MailerLog;
|
8 |
use MailPoet\Models\Newsletter as NewsletterModel;
|
9 |
use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel;
|
10 |
use MailPoet\Models\Setting;
|
89 |
$queue->newsletter_rendered_subject = Shortcodes::process($newsletter->subject, $newsletter, null, $queue);
|
90 |
$queue->newsletter_rendered_body = $rendered_newsletter;
|
91 |
$queue->save();
|
92 |
+
if($queue->getErrors()) {
|
93 |
+
return MailerLog::processError(
|
94 |
+
'queue_save',
|
95 |
+
__('There was an error processing your newsletter during sending. If possible, please contact us and report this issue.')
|
96 |
+
);
|
97 |
+
}
|
98 |
return $newsletter;
|
99 |
}
|
100 |
|
lib/Mailer/MailerLog.php
CHANGED
@@ -75,7 +75,7 @@ class MailerLog {
|
|
75 |
return self::resetMailerLog();
|
76 |
}
|
77 |
|
78 |
-
static function
|
79 |
$mailer_log = self::getMailerLog();
|
80 |
(int)$mailer_log['retry_attempt']++;
|
81 |
$mailer_log['retry_at'] = time() + self::RETRY_INTERVAL;
|
75 |
return self::resetMailerLog();
|
76 |
}
|
77 |
|
78 |
+
static function processError($operation, $error_message) {
|
79 |
$mailer_log = self::getMailerLog();
|
80 |
(int)$mailer_log['retry_attempt']++;
|
81 |
$mailer_log['retry_at'] = time() + self::RETRY_INTERVAL;
|
lib/Mailer/Methods/SMTP.php
CHANGED
@@ -17,7 +17,7 @@ class SMTP {
|
|
17 |
public $reply_to;
|
18 |
public $return_path;
|
19 |
public $mailer;
|
20 |
-
const SMTP_CONNECTION_TIMEOUT =
|
21 |
|
22 |
function __construct(
|
23 |
$host, $port, $authentication, $login = null, $password = null, $encryption,
|
@@ -55,7 +55,8 @@ class SMTP {
|
|
55 |
function buildMailer() {
|
56 |
$transport = \Swift_SmtpTransport::newInstance(
|
57 |
$this->host, $this->port, $this->encryption);
|
58 |
-
$
|
|
|
59 |
if($this->authentication) {
|
60 |
$transport
|
61 |
->setUsername($this->login)
|
@@ -129,4 +130,4 @@ class SMTP {
|
|
129 |
$message = explode(PHP_EOL, $message);
|
130 |
return $message[0];
|
131 |
}
|
132 |
-
}
|
17 |
public $reply_to;
|
18 |
public $return_path;
|
19 |
public $mailer;
|
20 |
+
const SMTP_CONNECTION_TIMEOUT = 15; // seconds
|
21 |
|
22 |
function __construct(
|
23 |
$host, $port, $authentication, $login = null, $password = null, $encryption,
|
55 |
function buildMailer() {
|
56 |
$transport = \Swift_SmtpTransport::newInstance(
|
57 |
$this->host, $this->port, $this->encryption);
|
58 |
+
$connection_timeout = Hooks::applyFilters('mailpoet_mailer_smtp_connection_timeout', self::SMTP_CONNECTION_TIMEOUT);
|
59 |
+
$transport->setTimeout($connection_timeout);
|
60 |
if($this->authentication) {
|
61 |
$transport
|
62 |
->setUsername($this->login)
|
130 |
$message = explode(PHP_EOL, $message);
|
131 |
return $message[0];
|
132 |
}
|
133 |
+
}
|
lib/Models/Model.php
CHANGED
@@ -170,6 +170,15 @@ class Model extends \Sudzy\ValidModel {
|
|
170 |
return static::whereNotNull('deleted_at');
|
171 |
}
|
172 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
/**
|
174 |
* Rethrow PDOExceptions to prevent exposing sensitive data in stack traces
|
175 |
*/
|
@@ -180,4 +189,4 @@ class Model extends \Sudzy\ValidModel {
|
|
180 |
throw new \Exception($e->getMessage());
|
181 |
}
|
182 |
}
|
183 |
-
}
|
170 |
return static::whereNotNull('deleted_at');
|
171 |
}
|
172 |
|
173 |
+
/**
|
174 |
+
* PHP 5.3 fix for incorrectly returned model results when using asArray() function.
|
175 |
+
* Jira reference: https://goo.gl/UZaMj5
|
176 |
+
* TODO: remove after phasing out PHP 5.3 support
|
177 |
+
*/
|
178 |
+
function asArray() {
|
179 |
+
return call_user_func_array('parent::as_array', func_get_args());
|
180 |
+
}
|
181 |
+
|
182 |
/**
|
183 |
* Rethrow PDOExceptions to prevent exposing sensitive data in stack traces
|
184 |
*/
|
189 |
throw new \Exception($e->getMessage());
|
190 |
}
|
191 |
}
|
192 |
+
}
|
lib/Models/Newsletter.php
CHANGED
@@ -280,6 +280,9 @@ class Newsletter extends Model {
|
|
280 |
// reset hash
|
281 |
$duplicate->set('hash', null);
|
282 |
|
|
|
|
|
|
|
283 |
$duplicate->save();
|
284 |
|
285 |
if($duplicate->getErrors() === false) {
|
280 |
// reset hash
|
281 |
$duplicate->set('hash', null);
|
282 |
|
283 |
+
// reset sent at date
|
284 |
+
$duplicate->set('sent_at', null);
|
285 |
+
|
286 |
$duplicate->save();
|
287 |
|
288 |
if($duplicate->getErrors() === false) {
|
lib/Newsletter/Links/Links.php
CHANGED
@@ -1,69 +1,52 @@
|
|
1 |
<?php
|
2 |
namespace MailPoet\Newsletter\Links;
|
3 |
|
4 |
-
use MailPoet\Models\Subscriber;
|
5 |
-
use MailPoet\Router\Router;
|
6 |
-
use MailPoet\Router\Endpoints\Track as TrackEndpoint;
|
7 |
use MailPoet\Models\NewsletterLink;
|
|
|
|
|
8 |
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
|
|
|
|
9 |
use MailPoet\Util\Helpers;
|
|
|
10 |
use MailPoet\Util\Security;
|
11 |
|
12 |
class Links {
|
13 |
const DATA_TAG_CLICK = '[mailpoet_click_data]';
|
14 |
const DATA_TAG_OPEN = '[mailpoet_open_data]';
|
15 |
-
|
16 |
const LINK_TYPE_SHORTCODE = 'shortcode';
|
17 |
-
const
|
18 |
|
19 |
static function process($content) {
|
20 |
$extracted_links = self::extract($content);
|
21 |
$processed_links = self::hash($extracted_links);
|
22 |
-
return self::replace($content, $
|
23 |
}
|
24 |
|
25 |
static function extract($content) {
|
26 |
$extracted_links = array();
|
27 |
-
//
|
28 |
-
# match href=' or href="
|
29 |
-
$regex = '#(?:href.*?=.*?)(["\']?)('
|
30 |
-
# match http://
|
31 |
-
. '(?:([\w-]+:)?//?)'
|
32 |
-
# match everything except for special characters # until .
|
33 |
-
. '[^\s()<>]+'
|
34 |
-
. '[.]'
|
35 |
-
# conditionally match everything except for special characters after .
|
36 |
-
. '(?:'
|
37 |
-
. '\([\w\d]+\)|'
|
38 |
-
. '(?:'
|
39 |
-
. '[^`!()\[\]{}:;\'".,<>«»“”‘’\s]|'
|
40 |
-
. '(?:[:]\d+)?/?'
|
41 |
-
. ')+'
|
42 |
-
. ')'
|
43 |
-
. ')\\1#';
|
44 |
-
// extract shortcodes with [link:*] format
|
45 |
$shortcodes = new Shortcodes();
|
46 |
-
$shortcodes = $shortcodes->extract(
|
|
|
|
|
|
|
47 |
if($shortcodes) {
|
48 |
$extracted_links = array_map(function($shortcode) {
|
49 |
return array(
|
50 |
'type' => Links::LINK_TYPE_SHORTCODE,
|
51 |
-
'html' => $shortcode,
|
52 |
'link' => $shortcode
|
53 |
);
|
54 |
}, $shortcodes);
|
55 |
}
|
56 |
-
// extract
|
57 |
-
|
58 |
-
$
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
'link' => $matched_urls[2][$index]
|
65 |
-
);
|
66 |
-
}
|
67 |
}
|
68 |
return array_unique($extracted_links, SORT_REGULAR);
|
69 |
}
|
@@ -74,10 +57,11 @@ class Links {
|
|
74 |
$hash = Security::generateHash();
|
75 |
// Use URL as a key to map between extracted and processed links
|
76 |
// regardless of their sequential position (useful for link skips etc.)
|
77 |
-
$
|
78 |
-
$processed_links[$
|
|
|
79 |
'hash' => $hash,
|
80 |
-
'
|
81 |
// replace link with a temporary data tag + hash
|
82 |
// it will be further replaced with the proper track API URL during sending
|
83 |
'processed_link' => self::DATA_TAG_CLICK . '-' . $hash
|
@@ -86,33 +70,30 @@ class Links {
|
|
86 |
return $processed_links;
|
87 |
}
|
88 |
|
89 |
-
static function replace($content, $
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
}
|
95 |
-
$processed_link = $processed_links[$key]['processed_link'];
|
96 |
-
// first, replace URL in the extracted HTML source with encoded link
|
97 |
-
$processed_link_html_source = str_replace(
|
98 |
-
$extracted_link['link'], $processed_link,
|
99 |
-
$extracted_link['html']
|
100 |
-
);
|
101 |
-
// second, replace original extracted HTML source with processed URL source
|
102 |
-
$content = str_replace(
|
103 |
-
$extracted_link['html'], $processed_link_html_source, $content
|
104 |
-
);
|
105 |
-
// third, replace text version URL with processed link: [description](url)
|
106 |
-
// regex is used to avoid replacing description URLs that are wrapped in round brackets
|
107 |
-
// i.e., <a href="http://google.com">(http://google.com)</a> => [(http://google.com)](http://processed_link)
|
108 |
-
$regex_escaped_extracted_link = preg_quote($extracted_link['link'], '/');
|
109 |
$content = preg_replace(
|
110 |
-
'/\[(.*?)\](\(' . $
|
111 |
-
'[$1](' . $
|
112 |
$content
|
113 |
);
|
114 |
-
// Clean up data used to generate a new link
|
115 |
-
unset($processed_links[$key]['processed_link']);
|
116 |
}
|
117 |
return array(
|
118 |
$content,
|
@@ -156,12 +137,12 @@ class Links {
|
|
156 |
|
157 |
static function save(array $links, $newsletter_id, $queue_id) {
|
158 |
foreach($links as $link) {
|
159 |
-
if(empty($link['hash']) || empty($link['
|
160 |
$newsletter_link = NewsletterLink::create();
|
161 |
$newsletter_link->newsletter_id = $newsletter_id;
|
162 |
$newsletter_link->queue_id = $queue_id;
|
163 |
$newsletter_link->hash = $link['hash'];
|
164 |
-
$newsletter_link->url = $link['
|
165 |
$newsletter_link->save();
|
166 |
}
|
167 |
}
|
@@ -178,7 +159,7 @@ class Links {
|
|
178 |
// convert either only link shortcodes or all hashes links if "convert all"
|
179 |
// option is specified
|
180 |
if($newsletter_link &&
|
181 |
-
|
182 |
) {
|
183 |
$content = str_replace($link, $newsletter_link->url, $content);
|
184 |
}
|
1 |
<?php
|
2 |
namespace MailPoet\Newsletter\Links;
|
3 |
|
|
|
|
|
|
|
4 |
use MailPoet\Models\NewsletterLink;
|
5 |
+
use MailPoet\Models\Subscriber;
|
6 |
+
use MailPoet\Newsletter\Shortcodes\Categories\Link;
|
7 |
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
8 |
+
use MailPoet\Router\Endpoints\Track as TrackEndpoint;
|
9 |
+
use MailPoet\Router\Router;
|
10 |
use MailPoet\Util\Helpers;
|
11 |
+
use MailPoet\Util\pQuery\pQuery as DomParser;
|
12 |
use MailPoet\Util\Security;
|
13 |
|
14 |
class Links {
|
15 |
const DATA_TAG_CLICK = '[mailpoet_click_data]';
|
16 |
const DATA_TAG_OPEN = '[mailpoet_open_data]';
|
|
|
17 |
const LINK_TYPE_SHORTCODE = 'shortcode';
|
18 |
+
const LINK_TYPE_URL = 'link';
|
19 |
|
20 |
static function process($content) {
|
21 |
$extracted_links = self::extract($content);
|
22 |
$processed_links = self::hash($extracted_links);
|
23 |
+
return self::replace($content, $processed_links);
|
24 |
}
|
25 |
|
26 |
static function extract($content) {
|
27 |
$extracted_links = array();
|
28 |
+
// extract link shortcodes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
$shortcodes = new Shortcodes();
|
30 |
+
$shortcodes = $shortcodes->extract(
|
31 |
+
$content,
|
32 |
+
$categories = array(Link::CATEGORY_NAME)
|
33 |
+
);
|
34 |
if($shortcodes) {
|
35 |
$extracted_links = array_map(function($shortcode) {
|
36 |
return array(
|
37 |
'type' => Links::LINK_TYPE_SHORTCODE,
|
|
|
38 |
'link' => $shortcode
|
39 |
);
|
40 |
}, $shortcodes);
|
41 |
}
|
42 |
+
// extract HTML anchor tags
|
43 |
+
$DOM = DomParser::parseStr($content);
|
44 |
+
foreach($DOM->query('a') as $link) {
|
45 |
+
if(!$link->href) continue;
|
46 |
+
$extracted_links[] = array(
|
47 |
+
'type' => self::LINK_TYPE_URL,
|
48 |
+
'link' => $link->href
|
49 |
+
);
|
|
|
|
|
|
|
50 |
}
|
51 |
return array_unique($extracted_links, SORT_REGULAR);
|
52 |
}
|
57 |
$hash = Security::generateHash();
|
58 |
// Use URL as a key to map between extracted and processed links
|
59 |
// regardless of their sequential position (useful for link skips etc.)
|
60 |
+
$link = $extracted_link['link'];
|
61 |
+
$processed_links[$link] = array(
|
62 |
+
'type' => $extracted_link['type'],
|
63 |
'hash' => $hash,
|
64 |
+
'link' => $link,
|
65 |
// replace link with a temporary data tag + hash
|
66 |
// it will be further replaced with the proper track API URL during sending
|
67 |
'processed_link' => self::DATA_TAG_CLICK . '-' . $hash
|
70 |
return $processed_links;
|
71 |
}
|
72 |
|
73 |
+
static function replace($content, $processed_links) {
|
74 |
+
// replace HTML anchor tags
|
75 |
+
$DOM = DomParser::parseStr($content);
|
76 |
+
foreach($DOM->query('a') as $link) {
|
77 |
+
$link_to_replace = $link->href;
|
78 |
+
$replacement_link = (!empty($processed_links[$link_to_replace]['processed_link'])) ?
|
79 |
+
$processed_links[$link_to_replace]['processed_link'] :
|
80 |
+
null;
|
81 |
+
if(!$replacement_link) continue;
|
82 |
+
$link->setAttribute('href', $replacement_link);
|
83 |
+
}
|
84 |
+
$content = $DOM->__toString();
|
85 |
+
// replace link shortcodes and markdown links
|
86 |
+
foreach($processed_links as $processed_link) {
|
87 |
+
$link_to_replace = $processed_link['link'];
|
88 |
+
$replacement_link = $processed_link['processed_link'];
|
89 |
+
if($processed_link['type'] == self::LINK_TYPE_SHORTCODE) {
|
90 |
+
$content = str_replace($link_to_replace, $replacement_link, $content);
|
91 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
$content = preg_replace(
|
93 |
+
'/\[(.*?)\](\(' . preg_quote($link_to_replace, '/') . '\))/',
|
94 |
+
'[$1](' . $replacement_link . ')',
|
95 |
$content
|
96 |
);
|
|
|
|
|
97 |
}
|
98 |
return array(
|
99 |
$content,
|
137 |
|
138 |
static function save(array $links, $newsletter_id, $queue_id) {
|
139 |
foreach($links as $link) {
|
140 |
+
if(empty($link['hash']) || empty($link['link'])) continue;
|
141 |
$newsletter_link = NewsletterLink::create();
|
142 |
$newsletter_link->newsletter_id = $newsletter_id;
|
143 |
$newsletter_link->queue_id = $queue_id;
|
144 |
$newsletter_link->hash = $link['hash'];
|
145 |
+
$newsletter_link->url = $link['link'];
|
146 |
$newsletter_link->save();
|
147 |
}
|
148 |
}
|
159 |
// convert either only link shortcodes or all hashes links if "convert all"
|
160 |
// option is specified
|
161 |
if($newsletter_link &&
|
162 |
+
(preg_match('/\[link:/', $newsletter_link->url) || $convert_all)
|
163 |
) {
|
164 |
$content = str_replace($link, $newsletter_link->url, $content);
|
165 |
}
|
lib/Newsletter/Renderer/Renderer.php
CHANGED
@@ -124,7 +124,7 @@ class Renderer {
|
|
124 |
}
|
125 |
|
126 |
function renderTextVersion($template) {
|
127 |
-
$template = utf8_encode($template);
|
128 |
return @\Html2Text\Html2Text::convert($template);
|
129 |
}
|
130 |
|
124 |
}
|
125 |
|
126 |
function renderTextVersion($template) {
|
127 |
+
$template = (mb_detect_encoding($template, 'UTF-8', true)) ? $template : utf8_encode($template);
|
128 |
return @\Html2Text\Html2Text::convert($template);
|
129 |
}
|
130 |
|
lib/Newsletter/Shortcodes/Categories/Link.php
CHANGED
@@ -7,6 +7,8 @@ use MailPoet\Statistics\Track\Unsubscribes;
|
|
7 |
use MailPoet\Subscription\Url as SubscriptionUrl;
|
8 |
|
9 |
class Link {
|
|
|
|
|
10 |
static function process(
|
11 |
$action,
|
12 |
$action_argument,
|
7 |
use MailPoet\Subscription\Url as SubscriptionUrl;
|
8 |
|
9 |
class Link {
|
10 |
+
const CATEGORY_NAME = 'link';
|
11 |
+
|
12 |
static function process(
|
13 |
$action,
|
14 |
$action_argument,
|
lib/Util/ConflictResolver.php
CHANGED
@@ -53,6 +53,7 @@ class ConflictResolver {
|
|
53 |
|
54 |
function resolveStylesConflict() {
|
55 |
$_this = $this;
|
|
|
56 |
// unload all styles except from the list of allowed
|
57 |
$dequeue_styles = function() use($_this) {
|
58 |
global $wp_styles;
|
@@ -73,6 +74,7 @@ class ConflictResolver {
|
|
73 |
|
74 |
function resolveScriptsConflict() {
|
75 |
$_this = $this;
|
|
|
76 |
// unload all scripts except from the list of allowed
|
77 |
$dequeue_scripts = function() use($_this) {
|
78 |
global $wp_scripts;
|
53 |
|
54 |
function resolveStylesConflict() {
|
55 |
$_this = $this;
|
56 |
+
$_this->permitted_assets_locations['styles'] = apply_filters('mailpoet_conflict_resolver_whitelist_style', $_this->permitted_assets_locations['styles']);
|
57 |
// unload all styles except from the list of allowed
|
58 |
$dequeue_styles = function() use($_this) {
|
59 |
global $wp_styles;
|
74 |
|
75 |
function resolveScriptsConflict() {
|
76 |
$_this = $this;
|
77 |
+
$_this->permitted_assets_locations['scripts'] = apply_filters('mailpoet_conflict_resolver_whitelist_script', $_this->permitted_assets_locations['scripts']);
|
78 |
// unload all scripts except from the list of allowed
|
79 |
$dequeue_scripts = function() use($_this) {
|
80 |
global $wp_scripts;
|
mailpoet.php
CHANGED
@@ -4,7 +4,7 @@ if(!defined('ABSPATH')) exit;
|
|
4 |
|
5 |
/*
|
6 |
* Plugin Name: MailPoet
|
7 |
-
* Version: 3.0.0-beta.36.3.
|
8 |
* Plugin URI: http://www.mailpoet.com
|
9 |
* Description: Create and send beautiful email newsletters, autoresponders, and post notifications without leaving WordPress. This is a beta version of our brand new plugin!
|
10 |
* Author: MailPoet
|
@@ -21,7 +21,7 @@ if(!defined('ABSPATH')) exit;
|
|
21 |
*/
|
22 |
|
23 |
$mailpoet_plugin = array(
|
24 |
-
'version' => '3.0.0-beta.36.3.
|
25 |
'filename' => __FILE__,
|
26 |
'path' => dirname(__FILE__),
|
27 |
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
|
4 |
|
5 |
/*
|
6 |
* Plugin Name: MailPoet
|
7 |
+
* Version: 3.0.0-beta.36.3.1
|
8 |
* Plugin URI: http://www.mailpoet.com
|
9 |
* Description: Create and send beautiful email newsletters, autoresponders, and post notifications without leaving WordPress. This is a beta version of our brand new plugin!
|
10 |
* Author: MailPoet
|
21 |
*/
|
22 |
|
23 |
$mailpoet_plugin = array(
|
24 |
+
'version' => '3.0.0-beta.36.3.1',
|
25 |
'filename' => __FILE__,
|
26 |
'path' => dirname(__FILE__),
|
27 |
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: mailpoet, wysija
|
|
3 |
Tags: newsletter, email, welcome email, post notification, autoresponder, signup, subscription, SMTP
|
4 |
Requires at least: 4.6
|
5 |
Tested up to: 4.8
|
6 |
-
Stable tag: 3.0.0-beta.36.3.
|
7 |
Create and send beautiful emails and newsletters from WordPress.
|
8 |
|
9 |
== Description ==
|
@@ -35,7 +35,7 @@ We consider this version to be a release candidate. In other words, it's pretty
|
|
35 |
|
36 |
= Premium version available =
|
37 |
|
38 |
-
[Get in touch](www.mailpoet.com/support/sales-pre-sales-questions/) if you are an existing customer and you want to switch.
|
39 |
|
40 |
= Translations =
|
41 |
|
@@ -93,6 +93,15 @@ Our [support site](https://beta.docs.mailpoet.com) has plenty of articles. You c
|
|
93 |
|
94 |
== Changelog ==
|
95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
= 3.0.0-beta.36.3.0 - 2017-07-11 =
|
97 |
* Added: migration script for MailPoet 2 users now imports settings;
|
98 |
* Fixed: emails are sorted by date sent instead of modified date; thanks Scott
|
3 |
Tags: newsletter, email, welcome email, post notification, autoresponder, signup, subscription, SMTP
|
4 |
Requires at least: 4.6
|
5 |
Tested up to: 4.8
|
6 |
+
Stable tag: 3.0.0-beta.36.3.1
|
7 |
Create and send beautiful emails and newsletters from WordPress.
|
8 |
|
9 |
== Description ==
|
35 |
|
36 |
= Premium version available =
|
37 |
|
38 |
+
[Get in touch](https://www.mailpoet.com/support/sales-pre-sales-questions/) if you are an existing customer and you want to switch.
|
39 |
|
40 |
= Translations =
|
41 |
|
93 |
|
94 |
== Changelog ==
|
95 |
|
96 |
+
= 3.0.0-beta.36.3.1 - 2017-07-18 =
|
97 |
+
* Added: you can now duplicate any item in the email designer;
|
98 |
+
* Improved: added filter to specify custom SMTP connection timeout value. Thanks, Rik;
|
99 |
+
* Improved: added a custom filter to whitelist JS/CSS styles that are loaded by other plugins on MailPoet's pages;
|
100 |
+
* Fixed: sending is not interrupted if a newsletter contains URLs with unicode characters. Thanks Sam!
|
101 |
+
* Fixed: sent date is reset when newsletter is duplicated;
|
102 |
+
* Fixed: SMTP sending frequency is properly updated when changed;
|
103 |
+
* Fixed: newsletter/form/subscriber listings no longer throw an error on some PHP 5.3 hosts. Thanks, Jérôme!
|
104 |
+
|
105 |
= 3.0.0-beta.36.3.0 - 2017-07-11 =
|
106 |
* Added: migration script for MailPoet 2 users now imports settings;
|
107 |
* Fixed: emails are sorted by date sent instead of modified date; thanks Scott
|
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 ComposerAutoloaderInit0cb1ee30fabb15d2899414384ee4767a::getLoader();
|
vendor/composer/ClassLoader.php
CHANGED
@@ -374,13 +374,9 @@ class ClassLoader
|
|
374 |
|
375 |
$first = $class[0];
|
376 |
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
-
$
|
378 |
-
|
379 |
-
|
380 |
-
$search = $subPath.'\\';
|
381 |
-
if (isset($this->prefixDirsPsr4[$search])) {
|
382 |
-
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
383 |
-
$length = $this->prefixLengthsPsr4[$first][$search];
|
384 |
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
|
385 |
return $file;
|
386 |
}
|
374 |
|
375 |
$first = $class[0];
|
376 |
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
+
foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
|
378 |
+
if (0 === strpos($class, $prefix)) {
|
379 |
+
foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
|
|
|
|
|
|
|
|
|
380 |
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
|
381 |
return $file;
|
382 |
}
|
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 ComposerAutoloaderInitb11a845052e8e6ed50a7c81deac5e0dc
|
|
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 ComposerAutoloaderInitb11a845052e8e6ed50a7c81deac5e0dc
|
|
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 ComposerAutoloaderInit0cb1ee30fabb15d2899414384ee4767a
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit0cb1ee30fabb15d2899414384ee4767a', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit0cb1ee30fabb15d2899414384ee4767a', '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\ComposerStaticInit0cb1ee30fabb15d2899414384ee4767a::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\ComposerStaticInit0cb1ee30fabb15d2899414384ee4767a::$files;
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequire0cb1ee30fabb15d2899414384ee4767a($fileIdentifier, $file);
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
+
function composerRequire0cb1ee30fabb15d2899414384ee4767a($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',
|
@@ -649,10 +649,10 @@ class ComposerStaticInitb11a845052e8e6ed50a7c81deac5e0dc
|
|
649 |
public static function getInitializer(ClassLoader $loader)
|
650 |
{
|
651 |
return \Closure::bind(function () use ($loader) {
|
652 |
-
$loader->prefixLengthsPsr4 =
|
653 |
-
$loader->prefixDirsPsr4 =
|
654 |
-
$loader->prefixesPsr0 =
|
655 |
-
$loader->classMap =
|
656 |
|
657 |
}, null, ClassLoader::class);
|
658 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit0cb1ee30fabb15d2899414384ee4767a
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
649 |
public static function getInitializer(ClassLoader $loader)
|
650 |
{
|
651 |
return \Closure::bind(function () use ($loader) {
|
652 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit0cb1ee30fabb15d2899414384ee4767a::$prefixLengthsPsr4;
|
653 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit0cb1ee30fabb15d2899414384ee4767a::$prefixDirsPsr4;
|
654 |
+
$loader->prefixesPsr0 = ComposerStaticInit0cb1ee30fabb15d2899414384ee4767a::$prefixesPsr0;
|
655 |
+
$loader->classMap = ComposerStaticInit0cb1ee30fabb15d2899414384ee4767a::$classMap;
|
656 |
|
657 |
}, null, ClassLoader::class);
|
658 |
}
|
views/newsletter/templates/blocks/base/toolsGeneric.hbs
CHANGED
@@ -3,7 +3,8 @@
|
|
3 |
<%= source('newsletter/templates/svg/block-tools/settings-column.svg') %>
|
4 |
</a>{{/if}}{{#if tools.settings}}<a href="javascript:;" class="mailpoet_tool mailpoet_edit_block mailpoet_ignore_drag" title="<%= __('Edit settings') %>">
|
5 |
<%= source('newsletter/templates/svg/block-tools/settings.svg') %>
|
6 |
-
</a>{{/if}}{{#if tools.delete}}<div class="mailpoet_delete_block mailpoet_ignore_drag"><a href="javascript:;" class="mailpoet_tool mailpoet_delete_block_activate" title="<%= __('Delete') %>"><%= source('newsletter/templates/svg/block-tools/trash.svg') %></a><a href="javascript:;" class="mailpoet_delete_block_confirm" title="<%= __('Confirm deletion') %>"><%= __('Delete') %></a><a href="javascript:;" class="mailpoet_delete_block_cancel" title="<%= __('Cancel deletion') %>"><%= __('Cancel') %></a></div>{{/if}}{{#if tools.
|
7 |
-
<%= source('newsletter/templates/svg/block-tools/
|
|
|
8 |
</a>{{/if}}
|
9 |
</div>
|
3 |
<%= source('newsletter/templates/svg/block-tools/settings-column.svg') %>
|
4 |
</a>{{/if}}{{#if tools.settings}}<a href="javascript:;" class="mailpoet_tool mailpoet_edit_block mailpoet_ignore_drag" title="<%= __('Edit settings') %>">
|
5 |
<%= source('newsletter/templates/svg/block-tools/settings.svg') %>
|
6 |
+
</a>{{/if}}{{#if tools.delete}}<div class="mailpoet_delete_block mailpoet_ignore_drag"><a href="javascript:;" class="mailpoet_tool mailpoet_delete_block_activate" title="<%= __('Delete') %>"><%= source('newsletter/templates/svg/block-tools/trash.svg') %></a><a href="javascript:;" class="mailpoet_delete_block_confirm" title="<%= __('Confirm deletion') %>"><%= __('Delete') %></a><a href="javascript:;" class="mailpoet_delete_block_cancel" title="<%= __('Cancel deletion') %>"><%= __('Cancel') %></a></div>{{/if}}{{#if tools.duplicate}}<a href="javascript:;" class="mailpoet_tool mailpoet_duplicate_block" title="<%= __('Duplicate') %>">
|
7 |
+
<%= source('newsletter/templates/svg/block-tools/duplicate.svg') %></a>{{/if}}{{#if tools.move}}<a href="javascript:;" class="mailpoet_tool mailpoet_move_block" title="<%= __('Drag to move') %>">
|
8 |
+
<%= source('newsletter/templates/svg/block-tools/move.svg') %>
|
9 |
</a>{{/if}}
|
10 |
</div>
|
views/newsletter/templates/svg/block-tools/duplicate.svg
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4 |
+
<svg class="mailpoet_tool_icon" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="612px"
|
5 |
+
height="611.632px" viewBox="0 93.684 612 611.632" enable-background="new 0 93.684 612 611.632" xml:space="preserve">
|
6 |
+
<g id="Layer_1">
|
7 |
+
<g id="Layer_1_copy">
|
8 |
+
<circle fill="#FFFFFF" cx="306" cy="403.5" r="269.5"/>
|
9 |
+
<polygon id="_x3C_Slice_x3E__1_" fill="none" points="0,69.6 612,69.6 614,724.4 2,724.4 "/>
|
10 |
+
<g id="Layer_3">
|
11 |
+
</g>
|
12 |
+
</g>
|
13 |
+
<g id="Layer_2">
|
14 |
+
<path d="M171.5,536.834"/>
|
15 |
+
</g>
|
16 |
+
</g>
|
17 |
+
<g id="Layer_3_1_">
|
18 |
+
<g>
|
19 |
+
<path d="M360.207,425.951V303.128c0-3.426-2.789-6.212-6.215-6.212H156.618c-3.426,0-6.212,2.786-6.212,6.212v122.823
|
20 |
+
c0,3.425,2.787,6.212,6.212,6.212h197.374C357.418,432.163,360.207,429.376,360.207,425.951z"/>
|
21 |
+
<path d="M305.816,93.684C136.918,93.684,0,230.602,0,399.5c0,168.896,136.918,305.816,305.816,305.816
|
22 |
+
c168.896,0,305.815-136.919,305.815-305.816C611.633,230.602,474.714,93.684,305.816,93.684z M104.845,425.951V303.128
|
23 |
+
c0-28.547,23.226-51.772,51.773-51.772h197.374c28.548,0,51.772,23.225,51.772,51.772v122.823
|
24 |
+
c0,28.548-23.225,51.772-51.772,51.772H156.618C128.071,477.724,104.845,454.499,104.845,425.951z M499.041,514.872
|
25 |
+
c0,28.548-23.225,51.772-51.772,51.772H231.894c-28.547,0-51.772-23.225-51.772-51.772h45.56c0,3.428,2.787,6.213,6.212,6.213
|
26 |
+
h215.375c3.426,0,6.212-2.785,6.212-6.213v-140.82c0-3.427-2.786-6.212-6.212-6.212v-45.562c28.548,0,51.772,23.226,51.772,51.773
|
27 |
+
V514.872z"/>
|
28 |
+
</g>
|
29 |
+
</g>
|
30 |
+
</svg>
|
views/settings/mta.html
CHANGED
@@ -54,76 +54,89 @@
|
|
54 |
/>
|
55 |
|
56 |
<!-- smtp: available sending methods -->
|
57 |
-
<ul class="mailpoet_sending_methods
|
58 |
<li
|
59 |
data-group="mailpoet"
|
60 |
<% if(settings.mta_group == 'mailpoet') %>class="mailpoet_active"<% endif %>
|
61 |
>
|
62 |
-
<
|
63 |
-
<
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
<div class="mailpoet_status">
|
96 |
<span><%= __('Activated') %></span>
|
97 |
-
</div>
|
98 |
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
<% if(settings.mta_group == 'mailpoet' or not(mss_key_valid)) %> disabled="disabled"<% endif %>
|
104 |
-
|
|
|
105 |
</div>
|
|
|
106 |
</li>
|
107 |
<li
|
108 |
data-group="other"
|
109 |
<% if(settings.mta_group == 'smtp' or settings.mta_group == 'website') %>class="mailpoet_active"<% endif %>
|
110 |
>
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
</li>
|
128 |
</ul>
|
129 |
|
@@ -266,10 +279,10 @@
|
|
266 |
type="number"
|
267 |
min="1"
|
268 |
max="1000"
|
269 |
-
<% if(settings.
|
270 |
-
|
271 |
<% else %>
|
272 |
-
|
273 |
<% endif %>
|
274 |
/>
|
275 |
<%= __('emails') %>
|
@@ -445,32 +458,6 @@
|
|
445 |
</td>
|
446 |
</tr>
|
447 |
|
448 |
-
<!-- smtp: domain -->
|
449 |
-
<tr class="mailpoet_smtp_field" data-field="domain"
|
450 |
-
<%
|
451 |
-
if settings.mta_group != "smtp" or settings.smtp_provider != "manual"
|
452 |
-
%>
|
453 |
-
style="display:none;"
|
454 |
-
<% endif %>
|
455 |
-
>
|
456 |
-
<th scope="row">
|
457 |
-
<label for="settings[mta_domain]">
|
458 |
-
<%= __('Domain') %>
|
459 |
-
</label>
|
460 |
-
<p class="description">
|
461 |
-
<%= __('e.g.: smtp.mydomain.com') %>
|
462 |
-
</p>
|
463 |
-
</th>
|
464 |
-
<td>
|
465 |
-
<input
|
466 |
-
type="text"
|
467 |
-
class="regular-text"
|
468 |
-
id="settings[mta_domain]"
|
469 |
-
name="mta[domain]"
|
470 |
-
value="<%= settings.mta.domain %>" />
|
471 |
-
</td>
|
472 |
-
</tr>
|
473 |
-
|
474 |
<!-- smtp: api key -->
|
475 |
<tr class="mailpoet_sendgrid_field" data-field="api_key"
|
476 |
<%
|
54 |
/>
|
55 |
|
56 |
<!-- smtp: available sending methods -->
|
57 |
+
<ul class="mailpoet_sending_methods">
|
58 |
<li
|
59 |
data-group="mailpoet"
|
60 |
<% if(settings.mta_group == 'mailpoet') %>class="mailpoet_active"<% endif %>
|
61 |
>
|
62 |
+
<div class="mailpoet_sending_method_description">
|
63 |
+
<h3>
|
64 |
+
<img
|
65 |
+
src="<%= assets_url %>/img/mailpoet_logo.png"
|
66 |
+
alt="MailPoet"
|
67 |
+
width="137"
|
68 |
+
height="54"
|
69 |
+
/>
|
70 |
+
</h3>
|
71 |
+
|
72 |
+
<p
|
73 |
+
class="mailpoet_description<% if(settings.mta_group != 'mailpoet') %> mailpoet_hidden<% endif %>"
|
74 |
+
id="mailpoet_sending_method_active_text"
|
75 |
+
>
|
76 |
+
<strong><%= __("You're now sending with MailPoet!") %></strong>
|
77 |
+
<br />
|
78 |
+
<%= __("Great, you're all set up. Your emails will now be sent quickly and reliably!") %>
|
79 |
+
</p>
|
80 |
+
|
81 |
+
<div
|
82 |
+
class="mailpoet_description<% if(settings.mta_group == 'mailpoet') %> mailpoet_hidden<% endif %>"
|
83 |
+
id="mailpoet_sending_method_inactive_text"
|
84 |
+
>
|
85 |
+
<strong><%= __("Solve all of your sending problems!") %></strong>
|
86 |
+
<br />
|
87 |
+
<%= __("Let MailPoet send your emails and get the Premium features for as little as 10 dollars or euros per month.") %>
|
88 |
+
<ul class="sending-method-benefits mailpoet_success">
|
89 |
+
<li class="mailpoet_success_item"><%= __('Reach the inbox, not the spam box.') %>
|
90 |
+
<li class="mailpoet_success_item"><%= __('Send emails up to 20 times faster than other sending methods.') %>
|
91 |
+
<li class="mailpoet_success_item"><%= __('SPF & DKIM signatures are already set up! No configuration required.') %>
|
92 |
+
<li class="mailpoet_success_item"><%= __('Automatically remove invalid and bounced addresses (bounce handling) to keep your lists clean.') %>
|
93 |
+
</ul>
|
94 |
+
<a
|
95 |
+
href="<%= admin_url('admin.php?page=mailpoet-premium') %>"
|
96 |
+
class="button button-primary"
|
97 |
+
target="_blank"
|
98 |
+
><%= __('Find out more') %></a>
|
99 |
+
</div>
|
100 |
+
</div>
|
101 |
<div class="mailpoet_status">
|
102 |
<span><%= __('Activated') %></span>
|
|
|
103 |
|
104 |
+
<div class="mailpoet_actions">
|
105 |
+
<button
|
106 |
+
type="button"
|
107 |
+
class="mailpoet_sending_service_activate button-secondary"
|
108 |
<% if(settings.mta_group == 'mailpoet' or not(mss_key_valid)) %> disabled="disabled"<% endif %>
|
109 |
+
><%= __('Activate') %></button>
|
110 |
+
</div>
|
111 |
</div>
|
112 |
+
|
113 |
</li>
|
114 |
<li
|
115 |
data-group="other"
|
116 |
<% if(settings.mta_group == 'smtp' or settings.mta_group == 'website') %>class="mailpoet_active"<% endif %>
|
117 |
>
|
118 |
+
<div class="mailpoet_sending_method_description">
|
119 |
+
<h3><%= __('Other') %></h3>
|
120 |
+
<div class="mailpoet_description">
|
121 |
+
<strong><%= __('Send with your website or third party') %></strong>
|
122 |
+
<br />
|
123 |
+
<%= __('Choose to send emails through your website (not recommended) or a third party sender.') %>
|
124 |
+
<ul class="sending-method-benefits mailpoet_error">
|
125 |
+
<li class="mailpoet_error_item"><%= __('You\'ll probably end up in spam.') %>
|
126 |
+
<li class="mailpoet_error_item"><%= __('Sending speed is limited by your web host.') %>
|
127 |
+
<li class="mailpoet_error_item"><%= __('Manual configuration of SPF and DKIM required.') %>
|
128 |
+
<li class="mailpoet_error_item"><%= __('Bounce handling is available, but only with an extra add-on.') %>
|
129 |
+
</ul>
|
130 |
+
</div>
|
131 |
+
</div>
|
132 |
+
<div class="mailpoet_status">
|
133 |
+
<span><%= __('Activated') %></span>
|
134 |
+
<div class="mailpoet_actions">
|
135 |
+
<a
|
136 |
+
class="button-secondary"
|
137 |
+
href="#mta/other"><%= __('Configure') %></a>
|
138 |
+
</div>
|
139 |
+
</div>
|
140 |
</li>
|
141 |
</ul>
|
142 |
|
279 |
type="number"
|
280 |
min="1"
|
281 |
max="1000"
|
282 |
+
<% if(settings.mta.frequency.emails) %>
|
283 |
+
value="<%= settings.mta.frequency.emails %>"
|
284 |
<% else %>
|
285 |
+
value="<%= default_frequency.website.emails %>"
|
286 |
<% endif %>
|
287 |
/>
|
288 |
<%= __('emails') %>
|
458 |
</td>
|
459 |
</tr>
|
460 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
461 |
<!-- smtp: api key -->
|
462 |
<tr class="mailpoet_sendgrid_field" data-field="api_key"
|
463 |
<%
|
views/settings/premium.html
CHANGED
@@ -25,22 +25,22 @@
|
|
25 |
><%= __('Verify') %></a>
|
26 |
</div>
|
27 |
<div
|
28 |
-
class="mailpoet_premium_key_valid
|
29 |
>
|
30 |
<%= __('Your Premium key has been successfully validated.') %>
|
31 |
</div>
|
32 |
<div
|
33 |
-
class="mailpoet_premium_key_invalid
|
34 |
>
|
35 |
<%= __('Your Premium key is invalid.') %>
|
36 |
</div>
|
37 |
<div
|
38 |
-
class="mailpoet_mss_key_valid
|
39 |
>
|
40 |
<%= __('Your MailPoet Sending Service key has been successfully validated.') %>
|
41 |
</div>
|
42 |
<div
|
43 |
-
class="mailpoet_mss_key_invalid
|
44 |
>
|
45 |
<%= __('Your MailPoet Sending Service key is invalid.') %>
|
46 |
</div>
|
25 |
><%= __('Verify') %></a>
|
26 |
</div>
|
27 |
<div
|
28 |
+
class="mailpoet_premium_key_valid mailpoet_success_item mailpoet_success<% if not(settings.premium.premium_key) or not(premium_key_valid) %> mailpoet_hidden<% endif %>"
|
29 |
>
|
30 |
<%= __('Your Premium key has been successfully validated.') %>
|
31 |
</div>
|
32 |
<div
|
33 |
+
class="mailpoet_premium_key_invalid mailpoet_error_item mailpoet_error<% if not(settings.premium.premium_key) or premium_key_valid %> mailpoet_hidden<% endif %>"
|
34 |
>
|
35 |
<%= __('Your Premium key is invalid.') %>
|
36 |
</div>
|
37 |
<div
|
38 |
+
class="mailpoet_mss_key_valid mailpoet_success_item mailpoet_success<% if not(settings.mta.mailpoet_api_key) or not(mss_key_valid) %> mailpoet_hidden<% endif %>"
|
39 |
>
|
40 |
<%= __('Your MailPoet Sending Service key has been successfully validated.') %>
|
41 |
</div>
|
42 |
<div
|
43 |
+
class="mailpoet_mss_key_invalid mailpoet_error_item mailpoet_error<% if not(settings.mta.mailpoet_api_key) or mss_key_valid %> mailpoet_hidden<% endif %>"
|
44 |
>
|
45 |
<%= __('Your MailPoet Sending Service key is invalid.') %>
|
46 |
</div>
|
views/update.html
CHANGED
@@ -10,9 +10,12 @@
|
|
10 |
</style>
|
11 |
|
12 |
<div class="wrap mailpoet-about-wrap">
|
13 |
-
<h1><%= __('
|
14 |
|
15 |
-
<p class="about-text"><%= __(
|
|
|
|
|
|
|
16 |
</p>
|
17 |
<div class="mailpoet-logo"><img src="<%= image_url('welcome_template/mailpoet-logo.png') %>" alt="MailPoet Logo" /></div>
|
18 |
|
@@ -21,8 +24,8 @@
|
|
21 |
<a href="admin.php?page=mailpoet-update" class="nav-tab nav-tab-active"><%= __("What's New") %></a>
|
22 |
</h2>
|
23 |
|
24 |
-
<div id="mailpoet-changelog"
|
25 |
-
<h2><%= __(
|
26 |
<% if changelog %>
|
27 |
<% for item in changelog %>
|
28 |
<h3><%= item.version %></h3>
|
@@ -31,22 +34,50 @@
|
|
31 |
<li><%= change %></li>
|
32 |
<% endfor %>
|
33 |
</ul>
|
34 |
-
<br>
|
35 |
<% endfor %>
|
36 |
<% else %>
|
37 |
-
<p style="text-align: center"><%= __(
|
38 |
<% endif %>
|
|
|
39 |
</div>
|
40 |
|
41 |
<hr>
|
42 |
|
43 |
-
|
44 |
-
<
|
45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
</div>
|
47 |
|
48 |
-
|
49 |
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
<script type="text/javascript">
|
52 |
jQuery(function($) {
|
@@ -56,7 +87,25 @@
|
|
56 |
{'MailPoet Free version': window.mailpoet_version}
|
57 |
);
|
58 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
});
|
|
|
60 |
</script>
|
61 |
<% endblock %>
|
62 |
-
|
10 |
</style>
|
11 |
|
12 |
<div class="wrap mailpoet-about-wrap">
|
13 |
+
<h1><%= __('Greetings, humans.') %></h1>
|
14 |
|
15 |
+
<p class="about-text"><%= __('Thanks for using MailPoet! We really appreciate all of your love, affection, [link]and (good) plugin reviews.[/link]')
|
16 |
+
|replaceLinkTags('https://wordpress.org/support/plugin/wysija-newsletters/reviews/', {'target' : '_blank'})
|
17 |
+
|raw
|
18 |
+
%>
|
19 |
</p>
|
20 |
<div class="mailpoet-logo"><img src="<%= image_url('welcome_template/mailpoet-logo.png') %>" alt="MailPoet Logo" /></div>
|
21 |
|
24 |
<a href="admin.php?page=mailpoet-update" class="nav-tab nav-tab-active"><%= __("What's New") %></a>
|
25 |
</h2>
|
26 |
|
27 |
+
<div id="mailpoet-changelog" class="feature-section one-col-left">
|
28 |
+
<h2 class="mailpoet-feature-top"><%= __('List of Changes') %></h2>
|
29 |
<% if changelog %>
|
30 |
<% for item in changelog %>
|
31 |
<h3><%= item.version %></h3>
|
34 |
<li><%= change %></li>
|
35 |
<% endfor %>
|
36 |
</ul>
|
|
|
37 |
<% endfor %>
|
38 |
<% else %>
|
39 |
+
<p style="text-align: center"><%= __('See readme.txt for a changelog.') %></p>
|
40 |
<% endif %>
|
41 |
+
<a class="button button-secondary" href="https://wordpress.org/plugins/mailpoet/#developers" target="_blank"><%= __('View all changes') %> →</a>
|
42 |
</div>
|
43 |
|
44 |
<hr>
|
45 |
|
46 |
+
<% if(not settings.analytics.enabled) %>
|
47 |
+
<div class="feature-section one-col">
|
48 |
+
<h2><%= __('Do Your Part to Make MailPoet Better') %></h2>
|
49 |
+
<div class="lead-description">
|
50 |
+
|
51 |
+
<label>
|
52 |
+
<input type="checkbox" id="mailpoet_analytics_enabled" value="1">
|
53 |
+
<%= __('Yes, share my data anonymously.') %>
|
54 |
+
</label>
|
55 |
+
</div>
|
56 |
+
<p><%= __("By sharing your data with us, you can help us understand what our users like (and don't like).") %>
|
57 |
+
<%= __('We use it to prioritize and develop new plugin features.') %><br>
|
58 |
+
<%= __('Share your data to help shape the future of MailPoet! [link]Read more.[/link]')
|
59 |
+
|replaceLinkTags('http://docs.mailpoet.com/article/36-share-your-data', {'target' : '_blank'})
|
60 |
+
|raw
|
61 |
+
%>
|
62 |
+
</div>
|
63 |
+
|
64 |
+
<hr>
|
65 |
+
<% endif %>
|
66 |
+
|
67 |
+
<div class="feature-section one-col">
|
68 |
+
<h2><%= __('Care to Give Your Opinion?') %></h2>
|
69 |
+
|
70 |
+
<script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/9780744.js"></script>
|
71 |
+
<noscript><a href="http://polldaddy.com/poll/9780744/">How likely is it that you would MailPoet to a friend or colleague?</a></noscript>
|
72 |
</div>
|
73 |
|
74 |
+
<hr>
|
75 |
|
76 |
+
<div class="feature-section one-col">
|
77 |
+
<a class="button button-primary" href="admin.php?page=mailpoet-newsletters"><%= __('Awesome! Now, take me to MailPoet') %> →</a>
|
78 |
+
</div>
|
79 |
+
|
80 |
+
</div>
|
81 |
|
82 |
<script type="text/javascript">
|
83 |
jQuery(function($) {
|
87 |
{'MailPoet Free version': window.mailpoet_version}
|
88 |
);
|
89 |
});
|
90 |
+
$('#mailpoet_analytics_enabled').on('click', function() {
|
91 |
+
var is_enabled = $(this).is(':checked') ? true : '';
|
92 |
+
MailPoet.Ajax.post({
|
93 |
+
api_version: window.mailpoet_api_version,
|
94 |
+
endpoint: 'settings',
|
95 |
+
action: 'set',
|
96 |
+
data: {
|
97 |
+
analytics: { enabled: (is_enabled)}
|
98 |
+
}
|
99 |
+
}).fail((response) => {
|
100 |
+
if (response.errors.length > 0) {
|
101 |
+
MailPoet.Notice.error(
|
102 |
+
response.errors.map((error) => { return error.message; }),
|
103 |
+
{ scroll: true }
|
104 |
+
);
|
105 |
+
}
|
106 |
+
});
|
107 |
+
})
|
108 |
});
|
109 |
+
|
110 |
</script>
|
111 |
<% endblock %>
|
|
views/welcome.html
CHANGED
@@ -19,9 +19,12 @@
|
|
19 |
</style>
|
20 |
|
21 |
<div class="wrap mailpoet-about-wrap">
|
22 |
-
<h1><%= __('
|
23 |
|
24 |
-
<p class="about-text"><%= __(
|
|
|
|
|
|
|
25 |
</p>
|
26 |
<div class="mailpoet-logo"><img src="<%= image_url('welcome_template/mailpoet-logo.png') %>" alt="<%= __('MailPoet Logo') %>" /></div>
|
27 |
|
19 |
</style>
|
20 |
|
21 |
<div class="wrap mailpoet-about-wrap">
|
22 |
+
<h1><%= __('Greetings, humans.') %></h1>
|
23 |
|
24 |
+
<p class="about-text"><%= __('Thanks for using MailPoet! We really appreciate all of your love, affection, [link]and (good) plugin reviews.[/link]')
|
25 |
+
|replaceLinkTags('https://wordpress.org/support/plugin/wysija-newsletters/reviews/', {'target' : '_blank'})
|
26 |
+
|raw
|
27 |
+
%>
|
28 |
</p>
|
29 |
<div class="mailpoet-logo"><img src="<%= image_url('welcome_template/mailpoet-logo.png') %>" alt="<%= __('MailPoet Logo') %>" /></div>
|
30 |
|