MailPoet Newsletters (New) - Version 3.3.4

Version Description

  • 2018-01-09 =
  • Fixed: the plugin no longer spams the same post notification email to subscribers. Thank you Mark, Bruno, Peter, Aaron, PJ, Silowe, Eytan, Beverly and others for your help!
  • Fixed: public assets are loaded for shortcode/PHP form placement methods. Thanks Ehsan!
Download this release

Release Info

Developer wysija
Plugin Icon 128x128 MailPoet Newsletters (New)
Version 3.3.4
Comparing to
See all releases

Code changes from version 3.3.2 to 3.3.4

Files changed (42) hide show
  1. assets/css/{admin-global.4193f33b.css → admin-global.673373a1.css} +3 -0
  2. assets/css/manifest.json +2 -2
  3. assets/css/{newsletter_editor.40bfeff4.css → newsletter_editor.9cb620b4.css} +4 -0
  4. assets/js/{admin.31aa078f.js → admin.895871dd.js} +1 -0
  5. assets/js/form_editor.cc7529b3.js +0 -0
  6. assets/js/mailpoet.a5fa72ae.js +0 -0
  7. assets/js/manifest.json +2 -2
  8. assets/js/{newsletter_editor.e7b87b92.js → newsletter_editor.963cbce1.js} +10 -0
  9. assets/js/vendor.367b3f22.js +1 -1
  10. lang/mailpoet-ca.mo +0 -0
  11. lang/mailpoet-da_DK.mo +0 -0
  12. lang/mailpoet-de_DE.mo +0 -0
  13. lang/mailpoet-en_GB.mo +0 -0
  14. lang/mailpoet-es_ES.mo +0 -0
  15. lang/mailpoet-fa_IR.mo +0 -0
  16. lang/mailpoet-fr_CA.mo +0 -0
  17. lang/mailpoet-fr_FR.mo +0 -0
  18. lang/mailpoet-it_IT.mo +0 -0
  19. lang/mailpoet-ja.mo +0 -0
  20. lang/mailpoet-nl_NL.mo +0 -0
  21. lang/mailpoet-pl_PL.mo +0 -0
  22. lang/mailpoet-pt_BR.mo +0 -0
  23. lang/mailpoet-pt_PT.mo +0 -0
  24. lang/mailpoet-ru_RU.mo +0 -0
  25. lang/mailpoet-sq.mo +0 -0
  26. lang/mailpoet-sv_SE.mo +0 -0
  27. lang/mailpoet-tr_TR.mo +0 -0
  28. lang/mailpoet.pot +63 -57
  29. lib/API/JSON/v1/Subscribers.php +9 -4
  30. lib/Cron/Workers/SendingQueue/SendingQueue.php +8 -1
  31. lib/Form/Widget.php +2 -4
  32. lib/Mailer/MailerLog.php +6 -2
  33. lib/Models/ModelValidator.php +7 -3
  34. lib/Models/SendingQueue.php +16 -6
  35. lib/Util/Helpers.php +6 -0
  36. mailpoet.php +2 -2
  37. readme.txt +10 -1
  38. vendor/autoload.php +1 -1
  39. vendor/composer/autoload_real.php +7 -7
  40. vendor/composer/autoload_static.php +5 -5
  41. views/newsletter/templates/blocks/base/toolsGeneric.hbs +1 -1
  42. views/subscribers/subscribers.html +1 -0
assets/css/{admin-global.4193f33b.css → admin-global.673373a1.css} RENAMED
@@ -30,3 +30,6 @@ Style for Members plugin
30
  font-size: 20px;
31
  margin-right: 3px;
32
  }
 
 
 
30
  font-size: 20px;
31
  margin-right: 3px;
32
  }
33
+ #wpbody {
34
+ padding-bottom: 20px;
35
+ }
assets/css/manifest.json CHANGED
@@ -1,8 +1,8 @@
1
  {
2
- "admin-global.css": "admin-global.4193f33b.css",
3
  "admin.css": "admin.666d9203.css",
4
  "importExport.css": "importExport.b3745466.css",
5
- "newsletter_editor.css": "newsletter_editor.40bfeff4.css",
6
  "public.css": "public.cae357df.css",
7
  "rtl.css": "rtl.d41d8cd9.css"
8
  }
1
  {
2
+ "admin-global.css": "admin-global.673373a1.css",
3
  "admin.css": "admin.666d9203.css",
4
  "importExport.css": "importExport.b3745466.css",
5
+ "newsletter_editor.css": "newsletter_editor.9cb620b4.css",
6
  "public.css": "public.cae357df.css",
7
  "rtl.css": "rtl.d41d8cd9.css"
8
  }
assets/css/{newsletter_editor.40bfeff4.css → newsletter_editor.9cb620b4.css} RENAMED
@@ -1763,6 +1763,7 @@ input.mailpoet_option_offset_left_small {
1763
  }
1764
  .mailpoet_delete_block_confirm {
1765
  color: #fff;
 
1766
  }
1767
  .mailpoet_delete_block_confirm:hover {
1768
  color: #fff;
@@ -1770,6 +1771,7 @@ input.mailpoet_option_offset_left_small {
1770
  }
1771
  .mailpoet_delete_block_cancel {
1772
  color: #f4c6c8;
 
1773
  }
1774
  .mailpoet_delete_block_cancel:hover {
1775
  color: #f4c6c8;
@@ -1986,6 +1988,8 @@ input.mailpoet_option_offset_left_small {
1986
  left: 0;
1987
  pointer-events: none;
1988
  border: 1px solid rgba(255,255,255,0);
 
 
1989
  }
1990
  .mailpoet_block:hover > .mailpoet_block_highlight {
1991
  border: 1px dashed #0074a2;
1763
  }
1764
  .mailpoet_delete_block_confirm {
1765
  color: #fff;
1766
+ float: right;
1767
  }
1768
  .mailpoet_delete_block_confirm:hover {
1769
  color: #fff;
1771
  }
1772
  .mailpoet_delete_block_cancel {
1773
  color: #f4c6c8;
1774
+ float: right;
1775
  }
1776
  .mailpoet_delete_block_cancel:hover {
1777
  color: #f4c6c8;
1988
  left: 0;
1989
  pointer-events: none;
1990
  border: 1px solid rgba(255,255,255,0);
1991
+ -webkit-transition: 0.3s;
1992
+ transition: 0.3s;
1993
  }
1994
  .mailpoet_block:hover > .mailpoet_block_highlight {
1995
  border: 1px dashed #0074a2;
assets/js/{admin.31aa078f.js → admin.895871dd.js} RENAMED
@@ -490,6 +490,7 @@ webpackJsonp([0],{
490
  label: MailPoet.I18n.t('lists'),
491
  type: 'selection',
492
  placeholder: MailPoet.I18n.t('selectList'),
 
493
  api_version: window.mailpoet_api_version,
494
  endpoint: 'segments',
495
  multiple: true,
490
  label: MailPoet.I18n.t('lists'),
491
  type: 'selection',
492
  placeholder: MailPoet.I18n.t('selectList'),
493
+ tip: MailPoet.I18n.t('welcomeEmailTip'),
494
  api_version: window.mailpoet_api_version,
495
  endpoint: 'segments',
496
  multiple: true,
assets/js/form_editor.cc7529b3.js CHANGED
File without changes
assets/js/mailpoet.a5fa72ae.js CHANGED
File without changes
assets/js/manifest.json CHANGED
@@ -1,10 +1,10 @@
1
  {
2
  "mp2migrator.js": "mp2migrator.81060f18.js",
3
  "public.js": "public.3d1d91ad.js",
4
- "admin.js": "admin.31aa078f.js",
5
  "admin_vendor.js": "admin_vendor.fe056ed3.js",
6
  "form_editor.js": "form_editor.cc7529b3.js",
7
  "mailpoet.js": "mailpoet.a5fa72ae.js",
8
- "newsletter_editor.js": "newsletter_editor.e7b87b92.js",
9
  "vendor.js": "vendor.367b3f22.js"
10
  }
1
  {
2
  "mp2migrator.js": "mp2migrator.81060f18.js",
3
  "public.js": "public.3d1d91ad.js",
4
+ "admin.js": "admin.895871dd.js",
5
  "admin_vendor.js": "admin_vendor.fe056ed3.js",
6
  "form_editor.js": "form_editor.cc7529b3.js",
7
  "mailpoet.js": "mailpoet.a5fa72ae.js",
8
+ "newsletter_editor.js": "newsletter_editor.963cbce1.js",
9
  "vendor.js": "vendor.367b3f22.js"
10
  }
assets/js/{newsletter_editor.e7b87b92.js → newsletter_editor.963cbce1.js} RENAMED
@@ -34547,9 +34547,19 @@ webpackJsonp([4],{
34547
  (new ViewType(_.extend({ model: this.model }, options || {}))).render();
34548
  },
34549
  showDeletionConfirmation: function () {
 
 
 
 
 
34550
  this.$('.mailpoet_delete_block').addClass('mailpoet_delete_block_activated');
34551
  },
34552
  hideDeletionConfirmation: function () {
 
 
 
 
 
34553
  this.$('.mailpoet_delete_block').removeClass('mailpoet_delete_block_activated');
34554
  },
34555
  deleteBlock: function (event) {
34547
  (new ViewType(_.extend({ model: this.model }, options || {}))).render();
34548
  },
34549
  showDeletionConfirmation: function () {
34550
+ this.$('.mailpoet_delete_block')
34551
+ .closest('.mailpoet_block')
34552
+ .find('> .mailpoet_block_highlight')
34553
+ .css({ background: '#E64047', opacity: 0.5 });
34554
+
34555
  this.$('.mailpoet_delete_block').addClass('mailpoet_delete_block_activated');
34556
  },
34557
  hideDeletionConfirmation: function () {
34558
+ this.$('.mailpoet_delete_block')
34559
+ .closest('.mailpoet_block')
34560
+ .find('> .mailpoet_block_highlight')
34561
+ .css({ background: 'transparent', opacity: 1 });
34562
+
34563
  this.$('.mailpoet_delete_block').removeClass('mailpoet_delete_block_activated');
34564
  },
34565
  deleteBlock: function (event) {
assets/js/vendor.367b3f22.js CHANGED
@@ -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":"31aa078f","1":"fe056ed3","2":"cc7529b3","3":"a5fa72ae","4":"e7b87b92"}[chunkId] + ".chunk.js";
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":"895871dd","1":"fe056ed3","2":"cc7529b3","3":"a5fa72ae","4":"963cbce1"}[chunkId] + ".chunk.js";
80
  /******/ head.appendChild(script);
81
  /******/ }
82
  /******/ };
lang/mailpoet-ca.mo CHANGED
Binary file
lang/mailpoet-da_DK.mo CHANGED
Binary file
lang/mailpoet-de_DE.mo CHANGED
Binary file
lang/mailpoet-en_GB.mo CHANGED
Binary file
lang/mailpoet-es_ES.mo CHANGED
Binary file
lang/mailpoet-fa_IR.mo CHANGED
Binary file
lang/mailpoet-fr_CA.mo CHANGED
Binary file
lang/mailpoet-fr_FR.mo CHANGED
Binary file
lang/mailpoet-it_IT.mo CHANGED
Binary file
lang/mailpoet-ja.mo CHANGED
Binary file
lang/mailpoet-nl_NL.mo CHANGED
Binary file
lang/mailpoet-pl_PL.mo CHANGED
Binary file
lang/mailpoet-pt_BR.mo CHANGED
Binary file
lang/mailpoet-pt_PT.mo CHANGED
Binary file
lang/mailpoet-ru_RU.mo CHANGED
Binary file
lang/mailpoet-sq.mo CHANGED
Binary file
lang/mailpoet-sv_SE.mo CHANGED
Binary file
lang/mailpoet-tr_TR.mo CHANGED
Binary file
lang/mailpoet.pot CHANGED
@@ -1,14 +1,14 @@
1
- # Copyright (C) 2017
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
7
- "POT-Creation-Date: 2017-12-19 16:42:10+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: MailPoet i18n "
13
  "(https://www.transifex.com/organization/wysija)\n"
14
  "Language-Team: MailPoet i18n "
@@ -26,6 +26,13 @@ msgstr ""
26
  "X-Poedit-Bookmarks: \n"
27
  "X-Textdomain-Support: yes\n"
28
 
 
 
 
 
 
 
 
29
  #: lib/API/API.php:19
30
  msgid "Invalid API version."
31
  msgstr ""
@@ -205,25 +212,25 @@ msgstr ""
205
  msgid "You have not specified any settings to be saved."
206
  msgstr ""
207
 
208
- #: lib/API/JSON/v1/Subscribers.php:32 lib/API/JSON/v1/Subscribers.php:173
209
- #: lib/API/JSON/v1/Subscribers.php:189 lib/API/JSON/v1/Subscribers.php:205
210
  #: lib/API/MP/v1/API.php:52 lib/API/MP/v1/API.php:97 lib/API/MP/v1/API.php:225
211
  msgid "This subscriber does not exist."
212
  msgstr ""
213
 
214
- #: lib/API/JSON/v1/Subscribers.php:80
215
  msgid "Please specify a valid form ID."
216
  msgstr ""
217
 
218
- #: lib/API/JSON/v1/Subscribers.php:85
219
  msgid "Please leave the first field empty."
220
  msgstr ""
221
 
222
- #: lib/API/JSON/v1/Subscribers.php:101 views/form/editor.html:57
223
  msgid "Please select a list."
224
  msgstr ""
225
 
226
- #: lib/API/JSON/v1/Subscribers.php:113
227
  msgid "You need to wait %d seconds before subscribing again."
228
  msgstr ""
229
 
@@ -299,13 +306,6 @@ msgstr ""
299
  msgid "MailPoet Newsletter"
300
  msgstr ""
301
 
302
- #: lib/Config/Initializer.php:46
303
- msgid ""
304
- "Unable to connect to the database (the database is unable to open a file or "
305
- "folder), the connection is likely not configured correctly. Please read our "
306
- "[link] Knowledge Base article [/link] for steps how to resolve it."
307
- msgstr ""
308
-
309
  #: lib/Config/MP2Migrator.php:151
310
  msgid "Start import"
311
  msgstr ""
@@ -422,20 +422,20 @@ msgstr ""
422
 
423
  #: lib/Config/Menu.php:186 lib/Config/Menu.php:187
424
  #: views/subscribers/importExport/import.html:7
425
- #: views/subscribers/subscribers.html:94
426
  msgid "Import"
427
  msgstr ""
428
 
429
  #: lib/Config/Menu.php:199 lib/Config/Menu.php:200
430
  #: views/subscribers/importExport/export.html:6
431
  #: views/subscribers/importExport/export.html:96
432
- #: views/subscribers/subscribers.html:95
433
  msgid "Export"
434
  msgstr ""
435
 
436
  #: lib/Config/Menu.php:212 lib/Config/Menu.php:213 views/forms.html:53
437
  #: views/newsletters.html:66 views/newsletters.html:168 views/segments.html:13
438
- #: views/subscribers/subscribers.html:66
439
  msgid "Lists"
440
  msgstr ""
441
 
@@ -1122,7 +1122,7 @@ msgstr ""
1122
 
1123
  #: lib/Form/Block/Date.php:77 lib/Form/Block/Date.php:199
1124
  #: views/form/templates/blocks/date_days.hbs:3 views/settings/bounce.html:252
1125
- #: views/subscribers/subscribers.html:92
1126
  msgid "Day"
1127
  msgstr ""
1128
 
@@ -1132,7 +1132,7 @@ msgstr ""
1132
 
1133
  #: lib/Form/Block/Date.php:86 lib/Form/Block/Date.php:143
1134
  #: views/form/templates/blocks/date_months.hbs:3
1135
- #: views/subscribers/subscribers.html:91
1136
  msgid "Month"
1137
  msgstr ""
1138
 
@@ -1144,7 +1144,7 @@ msgstr ""
1144
  #: lib/Form/Block/Date.php:173
1145
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:75
1146
  #: views/form/templates/blocks/date_years.hbs:5
1147
- #: views/subscribers/subscribers.html:90
1148
  msgid "Year"
1149
  msgstr ""
1150
 
@@ -1240,19 +1240,19 @@ msgstr ""
1240
  msgid "Add a newsletter subscription form"
1241
  msgstr ""
1242
 
1243
- #: lib/Form/Widget.php:120
1244
  msgid "An error has happened while performing a request, please try again later."
1245
  msgstr ""
1246
 
1247
- #: lib/Form/Widget.php:174
1248
  msgid "Subscribe to Our Newsletter"
1249
  msgstr ""
1250
 
1251
- #: lib/Form/Widget.php:189
1252
  msgid "Title:"
1253
  msgstr ""
1254
 
1255
- #: lib/Form/Widget.php:209
1256
  msgid "Create a new form"
1257
  msgstr ""
1258
 
@@ -1370,7 +1370,7 @@ msgstr ""
1370
  msgid "The template body cannot be empty."
1371
  msgstr ""
1372
 
1373
- #: lib/Models/Segment.php:114 views/subscribers/subscribers.html:86
1374
  msgid "WordPress Users"
1375
  msgstr ""
1376
 
@@ -1382,7 +1382,7 @@ msgstr ""
1382
  msgid "Not in a List"
1383
  msgstr ""
1384
 
1385
- #: lib/Models/SendingQueue.php:21
1386
  msgid "Rendered newsletter body is invalid!"
1387
  msgstr ""
1388
 
@@ -1445,7 +1445,7 @@ msgstr ""
1445
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:11
1446
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:108
1447
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:109
1448
- #: views/subscribers/subscribers.html:64
1449
  msgid "Subscriber"
1450
  msgstr ""
1451
 
@@ -1620,7 +1620,7 @@ msgstr ""
1620
 
1621
  #: lib/Subscribers/ImportExport/ImportExportFactory.php:35
1622
  #: lib/Subscription/Pages.php:302 views/newsletters.html:63
1623
- #: views/subscribers/subscribers.html:54 views/subscribers/subscribers.html:65
1624
  msgid "Status"
1625
  msgstr ""
1626
 
@@ -1697,7 +1697,7 @@ msgstr ""
1697
 
1698
  #: lib/Subscription/Pages.php:353 views/form/editor.html:29
1699
  #: views/form/editor.html:376 views/newsletter/templates/components/save.hbs:3
1700
- #: views/segments.html:56 views/subscribers/subscribers.html:96
1701
  msgid "Save"
1702
  msgstr ""
1703
 
@@ -1775,7 +1775,7 @@ msgid "Form"
1775
  msgstr ""
1776
 
1777
  #: views/form/editor.html:6 views/segments.html:68
1778
- #: views/subscribers/subscribers.html:97
1779
  msgid "Back"
1780
  msgstr ""
1781
 
@@ -2274,7 +2274,7 @@ msgid "Move to trash"
2274
  msgstr ""
2275
 
2276
  #: views/forms.html:68 views/newsletters.html:94 views/segments.html:48
2277
- #: views/subscribers/subscribers.html:93
2278
  msgid "Add New"
2279
  msgstr ""
2280
 
@@ -2960,11 +2960,11 @@ msgid "Delete"
2960
  msgstr ""
2961
 
2962
  #: views/newsletter/templates/blocks/base/toolsGeneric.hbs:6
2963
- msgid "Confirm deletion"
2964
  msgstr ""
2965
 
2966
  #: views/newsletter/templates/blocks/base/toolsGeneric.hbs:6
2967
- msgid "Cancel deletion"
2968
  msgstr ""
2969
 
2970
  #: views/newsletter/templates/blocks/base/toolsGeneric.hbs:7
@@ -3297,7 +3297,7 @@ msgstr ""
3297
  msgid "Created on"
3298
  msgstr ""
3299
 
3300
- #: views/newsletters.html:71 views/subscribers/subscribers.html:68
3301
  msgid "Last modified on"
3302
  msgstr ""
3303
 
@@ -5168,89 +5168,95 @@ msgstr ""
5168
  msgid "Subscriber was added successfully!"
5169
  msgstr ""
5170
 
5171
- #: views/subscribers/subscribers.html:67
 
 
 
 
 
 
5172
  msgid "Subscribed on"
5173
  msgstr ""
5174
 
5175
- #: views/subscribers/subscribers.html:69
5176
  msgid "1 subscriber was moved to the trash."
5177
  msgstr ""
5178
 
5179
- #: views/subscribers/subscribers.html:70
5180
  msgid "%$1d subscribers were moved to the trash."
5181
  msgstr ""
5182
 
5183
- #: views/subscribers/subscribers.html:71
5184
  msgid "1 subscriber was permanently deleted."
5185
  msgstr ""
5186
 
5187
- #: views/subscribers/subscribers.html:72
5188
  msgid "%$1d subscribers were permanently deleted."
5189
  msgstr ""
5190
 
5191
- #: views/subscribers/subscribers.html:73
5192
  msgid "1 subscriber has been restored from the trash."
5193
  msgstr ""
5194
 
5195
- #: views/subscribers/subscribers.html:74
5196
  msgid "%$1d subscribers have been restored from the trash."
5197
  msgstr ""
5198
 
5199
- #: views/subscribers/subscribers.html:75
5200
  msgid "Move to list..."
5201
  msgstr ""
5202
 
5203
- #: views/subscribers/subscribers.html:76
5204
  msgid "%$1d subscribers were moved to list <strong>%$2s</strong>"
5205
  msgstr ""
5206
 
5207
- #: views/subscribers/subscribers.html:77
5208
  msgid "Add to list..."
5209
  msgstr ""
5210
 
5211
- #: views/subscribers/subscribers.html:78
5212
  msgid "%$1d subscribers were added to list <strong>%$2s</strong>."
5213
  msgstr ""
5214
 
5215
- #: views/subscribers/subscribers.html:79
5216
  msgid "Remove from list..."
5217
  msgstr ""
5218
 
5219
- #: views/subscribers/subscribers.html:80
5220
  msgid "%$1d subscribers were removed from list <strong>%$2s</strong>"
5221
  msgstr ""
5222
 
5223
- #: views/subscribers/subscribers.html:81
5224
  msgid "Remove from all lists"
5225
  msgstr ""
5226
 
5227
- #: views/subscribers/subscribers.html:82
5228
  msgid "%$1d subscribers were removed from all lists."
5229
  msgstr ""
5230
 
5231
- #: views/subscribers/subscribers.html:83
5232
  msgid "Resend confirmation email"
5233
  msgstr ""
5234
 
5235
- #: views/subscribers/subscribers.html:84
5236
  msgid "%$1d confirmation emails have been sent."
5237
  msgstr ""
5238
 
5239
- #: views/subscribers/subscribers.html:85
5240
  msgid "Lists to which the subscriber was subscribed."
5241
  msgstr ""
5242
 
5243
- #: views/subscribers/subscribers.html:87
5244
  msgid ""
5245
  "This subscriber is a registered WordPress user. [link]Edit his/her "
5246
  "profile[/link] to change his/her email."
5247
  msgstr ""
5248
 
5249
- #: views/subscribers/subscribers.html:88
5250
  msgid "Tip:"
5251
  msgstr ""
5252
 
5253
- #: views/subscribers/subscribers.html:89
5254
  msgid ""
5255
  "Need to add new fields, like a telephone number or street address? You can "
5256
  "add custom fields by editing the subscription form on the Forms page."
1
+ # Copyright (C) 2018
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
7
+ "POT-Creation-Date: 2018-01-09 18:32:46+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: MailPoet i18n "
13
  "(https://www.transifex.com/organization/wysija)\n"
14
  "Language-Team: MailPoet i18n "
26
  "X-Poedit-Bookmarks: \n"
27
  "X-Textdomain-Support: yes\n"
28
 
29
+ #: Initializer.php:63 lib/Config/Initializer.php:46
30
+ msgid ""
31
+ "Unable to connect to the database (the database is unable to open a file or "
32
+ "folder), the connection is likely not configured correctly. Please read our "
33
+ "[link] Knowledge Base article [/link] for steps how to resolve it."
34
+ msgstr ""
35
+
36
  #: lib/API/API.php:19
37
  msgid "Invalid API version."
38
  msgstr ""
212
  msgid "You have not specified any settings to be saved."
213
  msgstr ""
214
 
215
+ #: lib/API/JSON/v1/Subscribers.php:33 lib/API/JSON/v1/Subscribers.php:178
216
+ #: lib/API/JSON/v1/Subscribers.php:194 lib/API/JSON/v1/Subscribers.php:210
217
  #: lib/API/MP/v1/API.php:52 lib/API/MP/v1/API.php:97 lib/API/MP/v1/API.php:225
218
  msgid "This subscriber does not exist."
219
  msgstr ""
220
 
221
+ #: lib/API/JSON/v1/Subscribers.php:81
222
  msgid "Please specify a valid form ID."
223
  msgstr ""
224
 
225
+ #: lib/API/JSON/v1/Subscribers.php:86
226
  msgid "Please leave the first field empty."
227
  msgstr ""
228
 
229
+ #: lib/API/JSON/v1/Subscribers.php:102 views/form/editor.html:57
230
  msgid "Please select a list."
231
  msgstr ""
232
 
233
+ #: lib/API/JSON/v1/Subscribers.php:114
234
  msgid "You need to wait %d seconds before subscribing again."
235
  msgstr ""
236
 
306
  msgid "MailPoet Newsletter"
307
  msgstr ""
308
 
 
 
 
 
 
 
 
309
  #: lib/Config/MP2Migrator.php:151
310
  msgid "Start import"
311
  msgstr ""
422
 
423
  #: lib/Config/Menu.php:186 lib/Config/Menu.php:187
424
  #: views/subscribers/importExport/import.html:7
425
+ #: views/subscribers/subscribers.html:95
426
  msgid "Import"
427
  msgstr ""
428
 
429
  #: lib/Config/Menu.php:199 lib/Config/Menu.php:200
430
  #: views/subscribers/importExport/export.html:6
431
  #: views/subscribers/importExport/export.html:96
432
+ #: views/subscribers/subscribers.html:96
433
  msgid "Export"
434
  msgstr ""
435
 
436
  #: lib/Config/Menu.php:212 lib/Config/Menu.php:213 views/forms.html:53
437
  #: views/newsletters.html:66 views/newsletters.html:168 views/segments.html:13
438
+ #: views/subscribers/subscribers.html:67
439
  msgid "Lists"
440
  msgstr ""
441
 
1122
 
1123
  #: lib/Form/Block/Date.php:77 lib/Form/Block/Date.php:199
1124
  #: views/form/templates/blocks/date_days.hbs:3 views/settings/bounce.html:252
1125
+ #: views/subscribers/subscribers.html:93
1126
  msgid "Day"
1127
  msgstr ""
1128
 
1132
 
1133
  #: lib/Form/Block/Date.php:86 lib/Form/Block/Date.php:143
1134
  #: views/form/templates/blocks/date_months.hbs:3
1135
+ #: views/subscribers/subscribers.html:92
1136
  msgid "Month"
1137
  msgstr ""
1138
 
1144
  #: lib/Form/Block/Date.php:173
1145
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:75
1146
  #: views/form/templates/blocks/date_years.hbs:5
1147
+ #: views/subscribers/subscribers.html:91
1148
  msgid "Year"
1149
  msgstr ""
1150
 
1240
  msgid "Add a newsletter subscription form"
1241
  msgstr ""
1242
 
1243
+ #: lib/Form/Widget.php:116
1244
  msgid "An error has happened while performing a request, please try again later."
1245
  msgstr ""
1246
 
1247
+ #: lib/Form/Widget.php:170
1248
  msgid "Subscribe to Our Newsletter"
1249
  msgstr ""
1250
 
1251
+ #: lib/Form/Widget.php:185
1252
  msgid "Title:"
1253
  msgstr ""
1254
 
1255
+ #: lib/Form/Widget.php:205
1256
  msgid "Create a new form"
1257
  msgstr ""
1258
 
1370
  msgid "The template body cannot be empty."
1371
  msgstr ""
1372
 
1373
+ #: lib/Models/Segment.php:114 views/subscribers/subscribers.html:87
1374
  msgid "WordPress Users"
1375
  msgstr ""
1376
 
1382
  msgid "Not in a List"
1383
  msgstr ""
1384
 
1385
+ #: lib/Models/SendingQueue.php:22
1386
  msgid "Rendered newsletter body is invalid!"
1387
  msgstr ""
1388
 
1445
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:11
1446
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:108
1447
  #: lib/Newsletter/Shortcodes/ShortcodesHelper.php:109
1448
+ #: views/subscribers/subscribers.html:65
1449
  msgid "Subscriber"
1450
  msgstr ""
1451
 
1620
 
1621
  #: lib/Subscribers/ImportExport/ImportExportFactory.php:35
1622
  #: lib/Subscription/Pages.php:302 views/newsletters.html:63
1623
+ #: views/subscribers/subscribers.html:54 views/subscribers/subscribers.html:66
1624
  msgid "Status"
1625
  msgstr ""
1626
 
1697
 
1698
  #: lib/Subscription/Pages.php:353 views/form/editor.html:29
1699
  #: views/form/editor.html:376 views/newsletter/templates/components/save.hbs:3
1700
+ #: views/segments.html:56 views/subscribers/subscribers.html:97
1701
  msgid "Save"
1702
  msgstr ""
1703
 
1775
  msgstr ""
1776
 
1777
  #: views/form/editor.html:6 views/segments.html:68
1778
+ #: views/subscribers/subscribers.html:98
1779
  msgid "Back"
1780
  msgstr ""
1781
 
2274
  msgstr ""
2275
 
2276
  #: views/forms.html:68 views/newsletters.html:94 views/segments.html:48
2277
+ #: views/subscribers/subscribers.html:94
2278
  msgid "Add New"
2279
  msgstr ""
2280
 
2960
  msgstr ""
2961
 
2962
  #: views/newsletter/templates/blocks/base/toolsGeneric.hbs:6
2963
+ msgid "Cancel deletion"
2964
  msgstr ""
2965
 
2966
  #: views/newsletter/templates/blocks/base/toolsGeneric.hbs:6
2967
+ msgid "Confirm deletion"
2968
  msgstr ""
2969
 
2970
  #: views/newsletter/templates/blocks/base/toolsGeneric.hbs:7
3297
  msgid "Created on"
3298
  msgstr ""
3299
 
3300
+ #: views/newsletters.html:71 views/subscribers/subscribers.html:69
3301
  msgid "Last modified on"
3302
  msgstr ""
3303
 
5168
  msgid "Subscriber was added successfully!"
5169
  msgstr ""
5170
 
5171
+ #: views/subscribers/subscribers.html:63
5172
+ msgid ""
5173
+ "This subscriber will receive Welcome Emails if any are active for your "
5174
+ "lists."
5175
+ msgstr ""
5176
+
5177
+ #: views/subscribers/subscribers.html:68
5178
  msgid "Subscribed on"
5179
  msgstr ""
5180
 
5181
+ #: views/subscribers/subscribers.html:70
5182
  msgid "1 subscriber was moved to the trash."
5183
  msgstr ""
5184
 
5185
+ #: views/subscribers/subscribers.html:71
5186
  msgid "%$1d subscribers were moved to the trash."
5187
  msgstr ""
5188
 
5189
+ #: views/subscribers/subscribers.html:72
5190
  msgid "1 subscriber was permanently deleted."
5191
  msgstr ""
5192
 
5193
+ #: views/subscribers/subscribers.html:73
5194
  msgid "%$1d subscribers were permanently deleted."
5195
  msgstr ""
5196
 
5197
+ #: views/subscribers/subscribers.html:74
5198
  msgid "1 subscriber has been restored from the trash."
5199
  msgstr ""
5200
 
5201
+ #: views/subscribers/subscribers.html:75
5202
  msgid "%$1d subscribers have been restored from the trash."
5203
  msgstr ""
5204
 
5205
+ #: views/subscribers/subscribers.html:76
5206
  msgid "Move to list..."
5207
  msgstr ""
5208
 
5209
+ #: views/subscribers/subscribers.html:77
5210
  msgid "%$1d subscribers were moved to list <strong>%$2s</strong>"
5211
  msgstr ""
5212
 
5213
+ #: views/subscribers/subscribers.html:78
5214
  msgid "Add to list..."
5215
  msgstr ""
5216
 
5217
+ #: views/subscribers/subscribers.html:79
5218
  msgid "%$1d subscribers were added to list <strong>%$2s</strong>."
5219
  msgstr ""
5220
 
5221
+ #: views/subscribers/subscribers.html:80
5222
  msgid "Remove from list..."
5223
  msgstr ""
5224
 
5225
+ #: views/subscribers/subscribers.html:81
5226
  msgid "%$1d subscribers were removed from list <strong>%$2s</strong>"
5227
  msgstr ""
5228
 
5229
+ #: views/subscribers/subscribers.html:82
5230
  msgid "Remove from all lists"
5231
  msgstr ""
5232
 
5233
+ #: views/subscribers/subscribers.html:83
5234
  msgid "%$1d subscribers were removed from all lists."
5235
  msgstr ""
5236
 
5237
+ #: views/subscribers/subscribers.html:84
5238
  msgid "Resend confirmation email"
5239
  msgstr ""
5240
 
5241
+ #: views/subscribers/subscribers.html:85
5242
  msgid "%$1d confirmation emails have been sent."
5243
  msgstr ""
5244
 
5245
+ #: views/subscribers/subscribers.html:86
5246
  msgid "Lists to which the subscriber was subscribed."
5247
  msgstr ""
5248
 
5249
+ #: views/subscribers/subscribers.html:88
5250
  msgid ""
5251
  "This subscriber is a registered WordPress user. [link]Edit his/her "
5252
  "profile[/link] to change his/her email."
5253
  msgstr ""
5254
 
5255
+ #: views/subscribers/subscribers.html:89
5256
  msgid "Tip:"
5257
  msgstr ""
5258
 
5259
+ #: views/subscribers/subscribers.html:90
5260
  msgid ""
5261
  "Need to add new fields, like a telephone number or street address? You can "
5262
  "add custom fields by editing the subscription form on the Forms page."
lib/API/JSON/v1/Subscribers.php CHANGED
@@ -10,6 +10,7 @@ use MailPoet\Form\Util\FieldNameObfuscator;
10
  use MailPoet\Models\Form;
11
  use MailPoet\Models\StatisticsForms;
12
  use MailPoet\Models\Subscriber;
 
13
  use MailPoet\Segments\SubscribersListings;
14
  use MailPoet\Subscription\Throttling as SubscriptionThrottling;
15
  use MailPoet\WP\Hooks;
@@ -158,11 +159,15 @@ class Subscribers extends APIEndpoint {
158
 
159
  if(!empty($errors)) {
160
  return $this->badRequest($errors);
161
- } else {
162
- return $this->successResponse(
163
- Subscriber::findOne($subscriber->id)->asArray()
164
- );
165
  }
 
 
 
 
 
 
 
 
166
  }
167
 
168
  function restore($data = array()) {
10
  use MailPoet\Models\Form;
11
  use MailPoet\Models\StatisticsForms;
12
  use MailPoet\Models\Subscriber;
13
+ use MailPoet\Newsletter\Scheduler\Scheduler;
14
  use MailPoet\Segments\SubscribersListings;
15
  use MailPoet\Subscription\Throttling as SubscriptionThrottling;
16
  use MailPoet\WP\Hooks;
159
 
160
  if(!empty($errors)) {
161
  return $this->badRequest($errors);
 
 
 
 
162
  }
163
+
164
+ if(!empty($data['segments'])) {
165
+ Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $data['segments']);
166
+ }
167
+
168
+ return $this->successResponse(
169
+ Subscriber::findOne($subscriber->id)->asArray()
170
+ );
171
  }
172
 
173
  function restore($data = array()) {
lib/Cron/Workers/SendingQueue/SendingQueue.php CHANGED
@@ -165,7 +165,14 @@ class SendingQueue {
165
  );
166
  }
167
  // update processed/to process list
168
- $queue->updateProcessedSubscribers($prepared_subscribers_ids);
 
 
 
 
 
 
 
169
  // log statistics
170
  StatisticsNewslettersModel::createMultiple($statistics);
171
  // update the sent count
165
  );
166
  }
167
  // update processed/to process list
168
+ if(!$queue->updateProcessedSubscribers($prepared_subscribers_ids)) {
169
+ MailerLog::processError(
170
+ 'processed_list_update',
171
+ sprintf('QUEUE-%d-PROCESSED-LIST-UPDATE', $queue->id),
172
+ null,
173
+ true
174
+ );
175
+ }
176
  // log statistics
177
  StatisticsNewslettersModel::createMultiple($statistics);
178
  // update the sent count
lib/Form/Widget.php CHANGED
@@ -23,9 +23,7 @@ class Widget extends \WP_Widget {
23
  );
24
 
25
  $this->renderer = new \MailPoet\Config\Renderer(!WP_DEBUG, !WP_DEBUG);
26
-
27
  if(!is_admin()) {
28
- $this->setupDependencies();
29
  $this->setupIframe();
30
  } else {
31
  add_action('widgets_admin_page', array(
@@ -89,8 +87,6 @@ class Widget extends \WP_Widget {
89
  }
90
 
91
  function setupDependencies() {
92
- if(!is_active_widget(false, false, $this->id_base, true)) return;
93
-
94
  wp_enqueue_style(
95
  'mailpoet_public',
96
  Env::$assets_url . '/css/' . $this->renderer->getCssAsset('public.css')
@@ -236,6 +232,8 @@ EOL;
236
  * Output the widget itself.
237
  */
238
  function widget($args, $instance = null) {
 
 
239
  // turn $args into variables
240
  extract($args);
241
 
23
  );
24
 
25
  $this->renderer = new \MailPoet\Config\Renderer(!WP_DEBUG, !WP_DEBUG);
 
26
  if(!is_admin()) {
 
27
  $this->setupIframe();
28
  } else {
29
  add_action('widgets_admin_page', array(
87
  }
88
 
89
  function setupDependencies() {
 
 
90
  wp_enqueue_style(
91
  'mailpoet_public',
92
  Env::$assets_url . '/css/' . $this->renderer->getCssAsset('public.css')
232
  * Output the widget itself.
233
  */
234
  function widget($args, $instance = null) {
235
+ $this->setupDependencies();
236
+
237
  // turn $args into variables
238
  extract($args);
239
 
lib/Mailer/MailerLog.php CHANGED
@@ -75,7 +75,7 @@ class MailerLog {
75
  return self::resetMailerLog();
76
  }
77
 
78
- static function processError($operation, $error_message, $error_code = null) {
79
  $mailer_log = self::getMailerLog();
80
  (int)$mailer_log['retry_attempt']++;
81
  $mailer_log['retry_at'] = time() + self::RETRY_INTERVAL;
@@ -86,7 +86,11 @@ class MailerLog {
86
  if($error_code) {
87
  $mailer_log['error']['error_code'] = $error_code;
88
  }
89
- self::updateMailerLog($mailer_log);
 
 
 
 
90
  return self::enforceExecutionRequirements();
91
  }
92
 
75
  return self::resetMailerLog();
76
  }
77
 
78
+ static function processError($operation, $error_message, $error_code = null, $pause_sending = false) {
79
  $mailer_log = self::getMailerLog();
80
  (int)$mailer_log['retry_attempt']++;
81
  $mailer_log['retry_at'] = time() + self::RETRY_INTERVAL;
86
  if($error_code) {
87
  $mailer_log['error']['error_code'] = $error_code;
88
  }
89
+ if($pause_sending) {
90
+ self::pauseSending($mailer_log);
91
+ } else {
92
+ self::updateMailerLog($mailer_log);
93
+ }
94
  return self::enforceExecutionRequirements();
95
  }
96
 
lib/Models/ModelValidator.php CHANGED
@@ -2,6 +2,8 @@
2
 
3
  namespace MailPoet\Models;
4
 
 
 
5
  if(!defined('ABSPATH')) exit;
6
 
7
  class ModelValidator extends \Sudzy\Engine {
@@ -35,9 +37,11 @@ class ModelValidator extends \Sudzy\Engine {
35
  }
36
 
37
  function validateRenderedNewsletterBody($newsletter_body) {
38
- $newsletter_body = (!is_serialized($newsletter_body)) ?
39
- $newsletter_body :
40
- unserialize($newsletter_body);
 
 
41
  return (is_null($newsletter_body) || (is_array($newsletter_body) && !empty($newsletter_body['html']) && !empty($newsletter_body['text'])));
42
  }
43
  }
2
 
3
  namespace MailPoet\Models;
4
 
5
+ use MailPoet\Util\Helpers;
6
+
7
  if(!defined('ABSPATH')) exit;
8
 
9
  class ModelValidator extends \Sudzy\Engine {
37
  }
38
 
39
  function validateRenderedNewsletterBody($newsletter_body) {
40
+ if(is_serialized($newsletter_body)) {
41
+ $newsletter_body = unserialize($newsletter_body);
42
+ } else if(Helpers::isJson($newsletter_body)) {
43
+ $newsletter_body = json_decode($newsletter_body, true);
44
+ }
45
  return (is_null($newsletter_body) || (is_array($newsletter_body) && !empty($newsletter_body['html']) && !empty($newsletter_body['text'])));
46
  }
47
  }
lib/Models/SendingQueue.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  namespace MailPoet\Models;
3
 
 
4
  use MailPoet\WP\Emoji;
5
 
6
  if(!defined('ABSPATH')) exit;
@@ -53,13 +54,14 @@ class SendingQueue extends Model {
53
  }
54
 
55
  function save() {
 
56
  if(!is_serialized($this->subscribers) && !is_null($this->subscribers)) {
57
  $this->set('subscribers', serialize($this->subscribers));
58
  }
59
- if(!is_serialized($this->newsletter_rendered_body) && !is_null($this->newsletter_rendered_body)) {
60
  $this->set(
61
  'newsletter_rendered_body',
62
- serialize($this->encodeEmojisInBody($this->newsletter_rendered_body))
63
  );
64
  }
65
  // set the default priority to medium
@@ -84,9 +86,7 @@ class SendingQueue extends Model {
84
  }
85
 
86
  function getNewsletterRenderedBody($type = false) {
87
- $rendered_newsletter = (!is_serialized($this->newsletter_rendered_body)) ?
88
- $this->newsletter_rendered_body :
89
- $this->decodeEmojisInBody(unserialize($this->newsletter_rendered_body));
90
  return ($type && !empty($rendered_newsletter[$type])) ?
91
  $rendered_newsletter[$type] :
92
  $rendered_newsletter;
@@ -151,7 +151,7 @@ class SendingQueue extends Model {
151
  )
152
  );
153
  $this->subscribers = $subscribers;
154
- $this->updateCount();
155
  }
156
 
157
  function updateCount() {
@@ -165,4 +165,14 @@ class SendingQueue extends Model {
165
  }
166
  return $this->save();
167
  }
 
 
 
 
 
 
 
 
 
 
168
  }
1
  <?php
2
  namespace MailPoet\Models;
3
 
4
+ use MailPoet\Util\Helpers;
5
  use MailPoet\WP\Emoji;
6
 
7
  if(!defined('ABSPATH')) exit;
54
  }
55
 
56
  function save() {
57
+ $this->newsletter_rendered_body = $this->getNewsletterRenderedBody();
58
  if(!is_serialized($this->subscribers) && !is_null($this->subscribers)) {
59
  $this->set('subscribers', serialize($this->subscribers));
60
  }
61
+ if(!Helpers::isJson($this->newsletter_rendered_body) && !is_null($this->newsletter_rendered_body)) {
62
  $this->set(
63
  'newsletter_rendered_body',
64
+ json_encode($this->encodeEmojisInBody($this->newsletter_rendered_body))
65
  );
66
  }
67
  // set the default priority to medium
86
  }
87
 
88
  function getNewsletterRenderedBody($type = false) {
89
+ $rendered_newsletter = $this->decodeRenderedNewsletterBodyObject($this->newsletter_rendered_body);
 
 
90
  return ($type && !empty($rendered_newsletter[$type])) ?
91
  $rendered_newsletter[$type] :
92
  $rendered_newsletter;
151
  )
152
  );
153
  $this->subscribers = $subscribers;
154
+ return $this->updateCount()->getErrors() === false;
155
  }
156
 
157
  function updateCount() {
165
  }
166
  return $this->save();
167
  }
168
+
169
+ private function decodeRenderedNewsletterBodyObject($rendered_body) {
170
+ if(is_serialized($rendered_body)) {
171
+ return $this->decodeEmojisInBody(unserialize($rendered_body));
172
+ }
173
+ if(Helpers::isJson($rendered_body)) {
174
+ return $this->decodeEmojisInBody(json_decode($rendered_body, true));
175
+ }
176
+ return $rendered_body;
177
+ }
178
  }
lib/Util/Helpers.php CHANGED
@@ -5,6 +5,12 @@ class Helpers {
5
  const DIVIDER = '***MailPoet***';
6
  const LINK_TAG = 'link';
7
 
 
 
 
 
 
 
8
  static function replaceLinkTags($source, $link = false, $attributes = array(), $link_tag = false) {
9
  if(!$link) return $source;
10
  $link_tag = ($link_tag) ? $link_tag : self::LINK_TAG;
5
  const DIVIDER = '***MailPoet***';
6
  const LINK_TAG = 'link';
7
 
8
+ static function isJson($string) {
9
+ if(!is_string($string)) return false;
10
+ json_decode($string);
11
+ return json_last_error() == JSON_ERROR_NONE;
12
+ }
13
+
14
  static function replaceLinkTags($source, $link = false, $attributes = array(), $link_tag = false) {
15
  if(!$link) return $source;
16
  $link_tag = ($link_tag) ? $link_tag : self::LINK_TAG;
mailpoet.php CHANGED
@@ -4,7 +4,7 @@ if(!defined('ABSPATH')) exit;
4
 
5
  /*
6
  * Plugin Name: MailPoet 3 (New)
7
- * Version: 3.3.2
8
  * Plugin URI: http://www.mailpoet.com
9
  * Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
10
  * Author: MailPoet
@@ -20,7 +20,7 @@ if(!defined('ABSPATH')) exit;
20
  */
21
 
22
  $mailpoet_plugin = array(
23
- 'version' => '3.3.2',
24
  'filename' => __FILE__,
25
  'path' => dirname(__FILE__),
26
  'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
4
 
5
  /*
6
  * Plugin Name: MailPoet 3 (New)
7
+ * Version: 3.3.4
8
  * Plugin URI: http://www.mailpoet.com
9
  * Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
10
  * Author: MailPoet
20
  */
21
 
22
  $mailpoet_plugin = array(
23
+ 'version' => '3.3.4',
24
  'filename' => __FILE__,
25
  'path' => dirname(__FILE__),
26
  'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: newsletter, email, welcome email, post notification, autoresponder, signup
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
  Requires PHP: 5.3
7
- Stable tag: 3.3.2
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -116,6 +116,15 @@ Stop by our [support site](https://www.mailpoet.com/support).
116
 
117
  == Changelog ==
118
 
 
 
 
 
 
 
 
 
 
119
  = 3.3.2 - 2017-12-19 =
120
  * Thanked: 2017 finally saw the release of MailPoet 3 and MailPoet Sending Service. We wouldn't have done it without your patience and support, for which we are extremely grateful. Thank YOU!
121
  * Wished: 2018 turns out to be an amazing year for all of our beloved and new users, and brings new features to our plugin - we've planned some great things and can't wait to implement them. Happy Holidays!
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
  Requires PHP: 5.3
7
+ Stable tag: 3.3.4
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
 
116
 
117
  == Changelog ==
118
 
119
+ = 3.3.4 - 2018-01-09 =
120
+ * Fixed: the plugin no longer spams the same post notification email to subscribers. Thank you Mark, Bruno, Peter, Aaron, PJ, Silowe, Eytan, Beverly and others for your help!
121
+ * Fixed: public assets are loaded for shortcode/PHP form placement methods. Thanks Ehsan!
122
+
123
+ = 3.3.3 - 2018-01-02 =
124
+ * Improved: Welcome emails are now sent for subscribers manually created by administrators;
125
+ * Improved: content deletion in email designer to more clearly warn about what is being deleted;
126
+ * Improved: HelpScout beacon no longer obstructs pagination in listings.
127
+
128
  = 3.3.2 - 2017-12-19 =
129
  * Thanked: 2017 finally saw the release of MailPoet 3 and MailPoet Sending Service. We wouldn't have done it without your patience and support, for which we are extremely grateful. Thank YOU!
130
  * Wished: 2018 turns out to be an amazing year for all of our beloved and new users, and brings new features to our plugin - we've planned some great things and can't wait to implement them. Happy Holidays!
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit20300ca7e2a24ea15c5439594ea0ca6d::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit8ac245097030e7d5d3c594abdb1eae69::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit20300ca7e2a24ea15c5439594ea0ca6d
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit20300ca7e2a24ea15c5439594ea0ca6d
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit20300ca7e2a24ea15c5439594ea0ca6d', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit20300ca7e2a24ea15c5439594ea0ca6d', '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\ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit20300ca7e2a24ea15c5439594ea0ca6d
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
- $includeFiles = Composer\Autoload\ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
- composerRequire20300ca7e2a24ea15c5439594ea0ca6d($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
- function composerRequire20300ca7e2a24ea15c5439594ea0ca6d($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit8ac245097030e7d5d3c594abdb1eae69
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit8ac245097030e7d5d3c594abdb1eae69', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit8ac245097030e7d5d3c594abdb1eae69', '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\ComposerStaticInit8ac245097030e7d5d3c594abdb1eae69::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\ComposerStaticInit8ac245097030e7d5d3c594abdb1eae69::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequire8ac245097030e7d5d3c594abdb1eae69($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
+ function composerRequire8ac245097030e7d5d3c594abdb1eae69($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 ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d
8
  {
9
  public static $files = array (
10
  '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@@ -984,10 +984,10 @@ class ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d
984
  public static function getInitializer(ClassLoader $loader)
985
  {
986
  return \Closure::bind(function () use ($loader) {
987
- $loader->prefixLengthsPsr4 = ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d::$prefixLengthsPsr4;
988
- $loader->prefixDirsPsr4 = ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d::$prefixDirsPsr4;
989
- $loader->prefixesPsr0 = ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d::$prefixesPsr0;
990
- $loader->classMap = ComposerStaticInit20300ca7e2a24ea15c5439594ea0ca6d::$classMap;
991
 
992
  }, null, ClassLoader::class);
993
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit8ac245097030e7d5d3c594abdb1eae69
8
  {
9
  public static $files = array (
10
  '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
984
  public static function getInitializer(ClassLoader $loader)
985
  {
986
  return \Closure::bind(function () use ($loader) {
987
+ $loader->prefixLengthsPsr4 = ComposerStaticInit8ac245097030e7d5d3c594abdb1eae69::$prefixLengthsPsr4;
988
+ $loader->prefixDirsPsr4 = ComposerStaticInit8ac245097030e7d5d3c594abdb1eae69::$prefixDirsPsr4;
989
+ $loader->prefixesPsr0 = ComposerStaticInit8ac245097030e7d5d3c594abdb1eae69::$prefixesPsr0;
990
+ $loader->classMap = ComposerStaticInit8ac245097030e7d5d3c594abdb1eae69::$classMap;
991
 
992
  }, null, ClassLoader::class);
993
  }
views/newsletter/templates/blocks/base/toolsGeneric.hbs CHANGED
@@ -3,7 +3,7 @@
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}}
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_cancel" title="<%= __('Cancel deletion') %>"><%= __('Cancel') %></a><a href="javascript:;" class="mailpoet_delete_block_confirm" title="<%= __('Confirm deletion') %>"><%= __('Delete') %></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}}
views/subscribers/subscribers.html CHANGED
@@ -60,6 +60,7 @@
60
  'unsubscribedOn': __('Unsubscribed on %$1s'),
61
  'subscriberUpdated': __('Subscriber was updated successfully!'),
62
  'subscriberAdded': __('Subscriber was added successfully!'),
 
63
 
64
  'subscriber': __('Subscriber'),
65
  'status': __('Status'),
60
  'unsubscribedOn': __('Unsubscribed on %$1s'),
61
  'subscriberUpdated': __('Subscriber was updated successfully!'),
62
  'subscriberAdded': __('Subscriber was added successfully!'),
63
+ 'welcomeEmailTip': __('This subscriber will receive Welcome Emails if any are active for your lists.'),
64
 
65
  'subscriber': __('Subscriber'),
66
  'status': __('Status'),