Version Description
- 2018-02-13 =
- Premium: you can now segment your subscribers by opened/clicked/unopened events;
- Improved: default post search parameters inside newsletter editor can be manually changed using a custom WordPress filter. Thanks Jose Salazar;
- Fixed: saving email templates when website uses both HTTP and HTTPS protocols.
Download this release
Release Info
Developer | wysija |
Plugin | MailPoet Newsletters (New) |
Version | 3.4.2 |
Comparing to | |
See all releases |
Code changes from version 3.4.1 to 3.4.2
- assets/js/{admin.e914b58f.js → admin.fd56d82f.js} +14 -2
- assets/js/{admin_vendor.d60039d9.js → admin_vendor.dd4a8492.js} +3 -1
- assets/js/lib/mailpoet_shortcodes/plugin.js +16 -18
- assets/js/manifest.json +3 -3
- assets/js/{vendor.e9cd522f.js → vendor.30849db9.js} +1 -1
- lang/mailpoet-ca.mo +0 -0
- lang/mailpoet-da_DK.mo +0 -0
- lang/mailpoet-de_DE.mo +0 -0
- lang/mailpoet-en_GB.mo +0 -0
- lang/mailpoet-es_ES.mo +0 -0
- lang/mailpoet-fa_IR.mo +0 -0
- lang/mailpoet-fr_CA.mo +0 -0
- lang/mailpoet-fr_FR.mo +0 -0
- lang/mailpoet-it_IT.mo +0 -0
- lang/mailpoet-ja.mo +0 -0
- lang/mailpoet-nl_NL.mo +0 -0
- lang/mailpoet-pl_PL.mo +0 -0
- lang/mailpoet-pt_BR.mo +0 -0
- lang/mailpoet-pt_PT.mo +0 -0
- lang/mailpoet-ru_RU.mo +0 -0
- lang/mailpoet-sq.mo +0 -0
- lang/mailpoet-sv_SE.mo +0 -0
- lang/mailpoet-tr_TR.mo +0 -0
- lang/mailpoet.pot +17 -12
- lib/API/JSON/v1/AutomatedLatestContent.php +13 -13
- lib/API/JSON/v1/NewsletterTemplates.php +3 -0
- lib/Models/CustomField.php +1 -16
- lib/Models/Form.php +0 -17
- lib/Models/Model.php +48 -0
- lib/Models/Newsletter.php +3 -17
- lib/Models/NewsletterOption.php +7 -13
- lib/Models/NewsletterTemplate.php +19 -18
- lib/Models/ScheduledTaskSubscriber.php +8 -14
- lib/Models/Segment.php +0 -19
- lib/Models/Setting.php +2 -14
- lib/Models/SubscriberCustomField.php +4 -12
- lib/Models/SubscriberSegment.php +6 -19
- mailpoet.php +2 -2
- readme.txt +6 -1
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +5 -5
- views/newsletters.html +3 -1
assets/js/{admin.e914b58f.js → admin.fd56d82f.js}
RENAMED
@@ -10449,7 +10449,8 @@ webpackJsonp([0],{
|
|
10449 |
var _this2 = this;
|
10450 |
|
10451 |
var iframe = document.createElement('iframe');
|
10452 |
-
|
|
|
10453 |
iframe.onload = function () {
|
10454 |
html2canvas(iframe.contentDocument.documentElement).then(function (thumbnail) {
|
10455 |
document.body.removeChild(iframe);
|
@@ -10468,9 +10469,20 @@ webpackJsonp([0],{
|
|
10468 |
}).then(done).fail(_this2.showError);
|
10469 |
});
|
10470 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10471 |
// just to hide the iframe
|
10472 |
iframe.className = 'mailpoet_template_iframe';
|
10473 |
-
|
|
|
|
|
|
|
|
|
10474 |
},
|
10475 |
handleSend: function handleSend(e) {
|
10476 |
var _this3 = this;
|
10449 |
var _this2 = this;
|
10450 |
|
10451 |
var iframe = document.createElement('iframe');
|
10452 |
+
var protocol = location.href.startsWith('https://') ? 'https' : 'http';
|
10453 |
+
iframe.src = protocol + response.meta.preview_url.replace(/^https?/, '');
|
10454 |
iframe.onload = function () {
|
10455 |
html2canvas(iframe.contentDocument.documentElement).then(function (thumbnail) {
|
10456 |
document.body.removeChild(iframe);
|
10469 |
}).then(done).fail(_this2.showError);
|
10470 |
});
|
10471 |
};
|
10472 |
+
var onError = function onError() {
|
10473 |
+
document.body.removeChild(iframe);
|
10474 |
+
MailPoet.Notice.error([MailPoet.I18n.t('errorWhileTakingScreenshot')], { scroll: true });
|
10475 |
+
done();
|
10476 |
+
};
|
10477 |
+
iframe.onerror = onError;
|
10478 |
+
iframe.onError = onError;
|
10479 |
// just to hide the iframe
|
10480 |
iframe.className = 'mailpoet_template_iframe';
|
10481 |
+
try {
|
10482 |
+
document.body.appendChild(iframe);
|
10483 |
+
} catch (err) {
|
10484 |
+
onError();
|
10485 |
+
}
|
10486 |
},
|
10487 |
handleSend: function handleSend(e) {
|
10488 |
var _this3 = this;
|
assets/js/{admin_vendor.d60039d9.js → admin_vendor.dd4a8492.js}
RENAMED
@@ -31338,7 +31338,9 @@ webpackJsonp([1],[
|
|
31338 |
action: 'delete',
|
31339 |
group: 'trash'
|
31340 |
}).done(function (response) {
|
31341 |
-
|
|
|
|
|
31342 |
// redirect to default group
|
31343 |
_this11.handleGroup('all');
|
31344 |
}).fail(function (response) {
|
31338 |
action: 'delete',
|
31339 |
group: 'trash'
|
31340 |
}).done(function (response) {
|
31341 |
+
if (_this11.props.messages !== undefined && _this11.props.messages.onDelete !== undefined) {
|
31342 |
+
_this11.props.messages.onDelete(response);
|
31343 |
+
}
|
31344 |
// redirect to default group
|
31345 |
_this11.handleGroup('all');
|
31346 |
}).fail(function (response) {
|
assets/js/lib/mailpoet_shortcodes/plugin.js
CHANGED
@@ -8,35 +8,33 @@
|
|
8 |
* its placeholder into editor text.
|
9 |
*/
|
10 |
|
11 |
-
/*
|
12 |
-
/*
|
13 |
-
tinymce.PluginManager.add('mailpoet_shortcodes', function
|
14 |
-
var appendLabelAndClose = function
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
21 |
};
|
22 |
-
};
|
23 |
|
24 |
editor.addButton('mailpoet_shortcodes', {
|
25 |
icon: 'mailpoet_shortcodes',
|
26 |
-
onclick: function
|
27 |
-
var shortcodes = []
|
28 |
-
|
29 |
-
var segment;
|
30 |
-
var i;
|
31 |
|
32 |
-
for (segment in configShortcodes) {
|
33 |
if (configShortcodes.hasOwnProperty(segment)) {
|
34 |
shortcodes.push({
|
35 |
type: 'label',
|
36 |
text: segment
|
37 |
});
|
38 |
|
39 |
-
for (i = 0; i < configShortcodes[segment].length; i += 1) {
|
40 |
shortcodes.push({
|
41 |
type: 'button',
|
42 |
text: configShortcodes[segment][i].text,
|
8 |
* its placeholder into editor text.
|
9 |
*/
|
10 |
|
11 |
+
/*jshint unused:false */
|
12 |
+
/*global tinymce:true */
|
13 |
+
tinymce.PluginManager.add('mailpoet_shortcodes', function(editor, url) {
|
14 |
+
var appendLabelAndClose = function(shortcode) {
|
15 |
+
editor.insertContent(shortcode);
|
16 |
+
editor.windowManager.close();
|
17 |
+
},
|
18 |
+
generateOnClickFunc = function(shortcode) {
|
19 |
+
return function() {
|
20 |
+
appendLabelAndClose(shortcode);
|
21 |
+
};
|
22 |
};
|
|
|
23 |
|
24 |
editor.addButton('mailpoet_shortcodes', {
|
25 |
icon: 'mailpoet_shortcodes',
|
26 |
+
onclick: function() {
|
27 |
+
var shortcodes = [],
|
28 |
+
configShortcodes = editor.settings.mailpoet_shortcodes;
|
|
|
|
|
29 |
|
30 |
+
for (var segment in configShortcodes) {
|
31 |
if (configShortcodes.hasOwnProperty(segment)) {
|
32 |
shortcodes.push({
|
33 |
type: 'label',
|
34 |
text: segment
|
35 |
});
|
36 |
|
37 |
+
for (var i = 0; i < configShortcodes[segment].length; i += 1) {
|
38 |
shortcodes.push({
|
39 |
type: 'button',
|
40 |
text: configShortcodes[segment][i].text,
|
assets/js/manifest.json
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
{
|
2 |
"mp2migrator.js": "mp2migrator.dc0d6e2b.js",
|
3 |
"public.js": "public.ea9ffa3f.js",
|
4 |
-
"admin.js": "admin.
|
5 |
-
"admin_vendor.js": "admin_vendor.
|
6 |
"form_editor.js": "form_editor.13982476.js",
|
7 |
"mailpoet.js": "mailpoet.a55b11ee.js",
|
8 |
"newsletter_editor.js": "newsletter_editor.6416262e.js",
|
9 |
-
"vendor.js": "vendor.
|
10 |
}
|
1 |
{
|
2 |
"mp2migrator.js": "mp2migrator.dc0d6e2b.js",
|
3 |
"public.js": "public.ea9ffa3f.js",
|
4 |
+
"admin.js": "admin.fd56d82f.js",
|
5 |
+
"admin_vendor.js": "admin_vendor.dd4a8492.js",
|
6 |
"form_editor.js": "form_editor.13982476.js",
|
7 |
"mailpoet.js": "mailpoet.a55b11ee.js",
|
8 |
"newsletter_editor.js": "newsletter_editor.6416262e.js",
|
9 |
+
"vendor.js": "vendor.30849db9.js"
|
10 |
}
|
assets/js/{vendor.e9cd522f.js → vendor.30849db9.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":"fd56d82f","1":"dd4a8492","2":"13982476","3":"a55b11ee","4":"6416262e"}[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
@@ -4,7 +4,7 @@ msgid ""
|
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: \n"
|
6 |
"Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
|
7 |
-
"POT-Creation-Date: 2018-02-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -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 ""
|
@@ -103,7 +110,7 @@ msgid "The email could not be sent: %s"
|
|
103 |
msgstr ""
|
104 |
|
105 |
#: lib/API/JSON/v1/NewsletterTemplates.php:22
|
106 |
-
#: lib/API/JSON/v1/NewsletterTemplates.php:
|
107 |
msgid "This template does not exist."
|
108 |
msgstr ""
|
109 |
|
@@ -307,13 +314,6 @@ msgstr ""
|
|
307 |
msgid "MailPoet Newsletter"
|
308 |
msgstr ""
|
309 |
|
310 |
-
#: lib/Config/Initializer.php:46
|
311 |
-
msgid ""
|
312 |
-
"Unable to connect to the database (the database is unable to open a file or "
|
313 |
-
"folder), the connection is likely not configured correctly. Please read our "
|
314 |
-
"[link] Knowledge Base article [/link] for steps how to resolve it."
|
315 |
-
msgstr ""
|
316 |
-
|
317 |
#: lib/Config/MP2Migrator.php:151
|
318 |
msgid "Start import"
|
319 |
msgstr ""
|
@@ -1307,7 +1307,7 @@ msgid "MailPoet API key is invalid!"
|
|
1307 |
msgstr ""
|
1308 |
|
1309 |
#: lib/Models/CustomField.php:20 lib/Models/Form.php:13
|
1310 |
-
#: lib/Models/NewsletterOptionField.php:12 lib/Models/NewsletterTemplate.php:
|
1311 |
#: lib/Models/Segment.php:15 lib/Models/Setting.php:22
|
1312 |
#: views/form/templates/settings/field_form.hbs:53
|
1313 |
#: views/subscribers/importExport/import/step2.html:134
|
@@ -1331,7 +1331,8 @@ msgstr ""
|
|
1331 |
msgid "Trash"
|
1332 |
msgstr ""
|
1333 |
|
1334 |
-
#: lib/Models/Model.php:
|
|
|
1335 |
msgid "Another record already exists. Please specify a different \"%1$s\"."
|
1336 |
msgstr ""
|
1337 |
|
@@ -1374,7 +1375,7 @@ msgstr ""
|
|
1374 |
msgid "Please specify a newsletter type."
|
1375 |
msgstr ""
|
1376 |
|
1377 |
-
#: lib/Models/NewsletterTemplate.php:
|
1378 |
msgid "The template body cannot be empty."
|
1379 |
msgstr ""
|
1380 |
|
@@ -3944,6 +3945,10 @@ msgstr ""
|
|
3944 |
msgid "This category does not contain any template yet!"
|
3945 |
msgstr ""
|
3946 |
|
|
|
|
|
|
|
|
|
3947 |
#: views/premium.html:6
|
3948 |
msgid "What is MailPoet Premium?"
|
3949 |
msgstr ""
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: \n"
|
6 |
"Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
|
7 |
+
"POT-Creation-Date: 2018-02-13 18:51:04+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
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 ""
|
110 |
msgstr ""
|
111 |
|
112 |
#: lib/API/JSON/v1/NewsletterTemplates.php:22
|
113 |
+
#: lib/API/JSON/v1/NewsletterTemplates.php:68
|
114 |
msgid "This template does not exist."
|
115 |
msgstr ""
|
116 |
|
314 |
msgid "MailPoet Newsletter"
|
315 |
msgstr ""
|
316 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
#: lib/Config/MP2Migrator.php:151
|
318 |
msgid "Start import"
|
319 |
msgstr ""
|
1307 |
msgstr ""
|
1308 |
|
1309 |
#: lib/Models/CustomField.php:20 lib/Models/Form.php:13
|
1310 |
+
#: lib/Models/NewsletterOptionField.php:12 lib/Models/NewsletterTemplate.php:16
|
1311 |
#: lib/Models/Segment.php:15 lib/Models/Setting.php:22
|
1312 |
#: views/form/templates/settings/field_form.hbs:53
|
1313 |
#: views/subscribers/importExport/import/step2.html:134
|
1331 |
msgid "Trash"
|
1332 |
msgstr ""
|
1333 |
|
1334 |
+
#: lib/Models/Model.php:108
|
1335 |
+
#: views/subscribers/importExport/import/step2.html:137
|
1336 |
msgid "Another record already exists. Please specify a different \"%1$s\"."
|
1337 |
msgstr ""
|
1338 |
|
1375 |
msgid "Please specify a newsletter type."
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: lib/Models/NewsletterTemplate.php:19
|
1379 |
msgid "The template body cannot be empty."
|
1380 |
msgstr ""
|
1381 |
|
3945 |
msgid "This category does not contain any template yet!"
|
3946 |
msgstr ""
|
3947 |
|
3948 |
+
#: views/newsletters.html:275
|
3949 |
+
msgid "An error occured while saving the template in \"Recently sent\""
|
3950 |
+
msgstr ""
|
3951 |
+
|
3952 |
#: views/premium.html:6
|
3953 |
msgid "What is MailPoet Premium?"
|
3954 |
msgstr ""
|
lib/API/JSON/v1/AutomatedLatestContent.php
CHANGED
@@ -4,6 +4,7 @@ namespace MailPoet\API\JSON\v1;
|
|
4 |
|
5 |
use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
6 |
use MailPoet\Config\AccessControl;
|
|
|
7 |
use MailPoet\WP\Posts as WPPosts;
|
8 |
|
9 |
if(!defined('ABSPATH')) exit;
|
@@ -43,20 +44,19 @@ class AutomatedLatestContent extends APIEndpoint {
|
|
43 |
$search = (isset($data['search'])) ? $data['search'] : '';
|
44 |
$limit = (isset($data['limit'])) ? (int)$data['limit'] : 50;
|
45 |
$page = (isset($data['page'])) ? (int)$data['page'] : 1;
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
'offset' => $limit * ($page - 1),
|
55 |
-
'orderby' => 'name',
|
56 |
-
'order' => 'ASC'
|
57 |
-
)
|
58 |
-
)
|
59 |
);
|
|
|
|
|
|
|
|
|
60 |
}
|
61 |
|
62 |
function getPosts($data = array()) {
|
4 |
|
5 |
use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
6 |
use MailPoet\Config\AccessControl;
|
7 |
+
use MailPoet\WP\Hooks;
|
8 |
use MailPoet\WP\Posts as WPPosts;
|
9 |
|
10 |
if(!defined('ABSPATH')) exit;
|
44 |
$search = (isset($data['search'])) ? $data['search'] : '';
|
45 |
$limit = (isset($data['limit'])) ? (int)$data['limit'] : 50;
|
46 |
$page = (isset($data['page'])) ? (int)$data['page'] : 1;
|
47 |
+
$args = array(
|
48 |
+
'taxonomy' => $taxonomies,
|
49 |
+
'hide_empty' => false,
|
50 |
+
'search' => $search,
|
51 |
+
'number' => $limit,
|
52 |
+
'offset' => $limit * ($page - 1),
|
53 |
+
'orderby' => 'name',
|
54 |
+
'order' => 'ASC'
|
|
|
|
|
|
|
|
|
|
|
55 |
);
|
56 |
+
|
57 |
+
$args = Hooks::applyFilters('mailpoet_search_terms_args', $args);
|
58 |
+
|
59 |
+
return $this->successResponse(WPPosts::getTerms($args));
|
60 |
}
|
61 |
|
62 |
function getPosts($data = array()) {
|
lib/API/JSON/v1/NewsletterTemplates.php
CHANGED
@@ -45,9 +45,12 @@ class NewsletterTemplates extends APIEndpoint {
|
|
45 |
$data['id'] = $template['id'];
|
46 |
}
|
47 |
}
|
|
|
48 |
$template = NewsletterTemplate::createOrUpdate($data);
|
49 |
$errors = $template->getErrors();
|
50 |
|
|
|
|
|
51 |
if(!empty($errors)) {
|
52 |
return $this->errorResponse($errors);
|
53 |
} else {
|
45 |
$data['id'] = $template['id'];
|
46 |
}
|
47 |
}
|
48 |
+
|
49 |
$template = NewsletterTemplate::createOrUpdate($data);
|
50 |
$errors = $template->getErrors();
|
51 |
|
52 |
+
NewsletterTemplate::cleanRecentlySent($data);
|
53 |
+
|
54 |
if(!empty($errors)) {
|
55 |
return $this->errorResponse($errors);
|
56 |
} else {
|
lib/Models/CustomField.php
CHANGED
@@ -127,25 +127,10 @@ class CustomField extends Model {
|
|
127 |
}
|
128 |
|
129 |
static function createOrUpdate($data = array()) {
|
130 |
-
$custom_field = false;
|
131 |
-
|
132 |
-
if(isset($data['id']) && (int)$data['id'] > 0) {
|
133 |
-
$custom_field = self::findOne((int)$data['id']);
|
134 |
-
}
|
135 |
-
|
136 |
// set name as label by default
|
137 |
if(empty($data['params']['label']) && isset($data['name'])) {
|
138 |
$data['params']['label'] = $data['name'];
|
139 |
}
|
140 |
-
|
141 |
-
if($custom_field === false) {
|
142 |
-
$custom_field = self::create();
|
143 |
-
$custom_field->hydrate($data);
|
144 |
-
} else {
|
145 |
-
unset($data['id']);
|
146 |
-
$custom_field->set($data);
|
147 |
-
}
|
148 |
-
|
149 |
-
return $custom_field->save();
|
150 |
}
|
151 |
}
|
127 |
}
|
128 |
|
129 |
static function createOrUpdate($data = array()) {
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
// set name as label by default
|
131 |
if(empty($data['params']['label']) && isset($data['name'])) {
|
132 |
$data['params']['label'] = $data['name'];
|
133 |
}
|
134 |
+
return parent::_createOrUpdate($data);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
135 |
}
|
136 |
}
|
lib/Models/Form.php
CHANGED
@@ -108,21 +108,4 @@ class Form extends Model {
|
|
108 |
return $orm->whereNull('deleted_at');
|
109 |
}
|
110 |
|
111 |
-
static function createOrUpdate($data = array()) {
|
112 |
-
$form = false;
|
113 |
-
|
114 |
-
if(isset($data['id']) && (int)$data['id'] > 0) {
|
115 |
-
$form = self::findOne((int)$data['id']);
|
116 |
-
}
|
117 |
-
|
118 |
-
if($form === false) {
|
119 |
-
$form = self::create();
|
120 |
-
$form->hydrate($data);
|
121 |
-
} else {
|
122 |
-
unset($data['id']);
|
123 |
-
$form->set($data);
|
124 |
-
}
|
125 |
-
|
126 |
-
return $form->save();
|
127 |
-
}
|
128 |
}
|
108 |
return $orm->whereNull('deleted_at');
|
109 |
}
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
}
|
lib/Models/Model.php
CHANGED
@@ -20,6 +20,54 @@ class Model extends \Sudzy\ValidModel {
|
|
20 |
return parent::create();
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
function getErrors() {
|
24 |
if(empty($this->_errors)) {
|
25 |
return false;
|
20 |
return parent::create();
|
21 |
}
|
22 |
|
23 |
+
/**
|
24 |
+
* Creates a row, or updates it if already exists. It tries to find the existing
|
25 |
+
* row by `id` (if given in `$data`), or by the given `$keys`. If `$onCreate` is
|
26 |
+
* given, it's used to transform `$data` before creating the new row.
|
27 |
+
*
|
28 |
+
* @param array $data
|
29 |
+
* @param boolean $keys
|
30 |
+
* @param callable $onCreate
|
31 |
+
* @return self
|
32 |
+
*/
|
33 |
+
static protected function _createOrUpdate($data = array(), $keys = false, $onCreate = false) {
|
34 |
+
$model = false;
|
35 |
+
|
36 |
+
if(isset($data['id']) && (int)$data['id'] > 0) {
|
37 |
+
$model = static::findOne((int)$data['id']);
|
38 |
+
}
|
39 |
+
|
40 |
+
if(!empty($keys)) {
|
41 |
+
$first = true;
|
42 |
+
foreach($keys as $field => $value) {
|
43 |
+
if($first) {
|
44 |
+
$model = static::where($field, $value);
|
45 |
+
$first = false;
|
46 |
+
} else {
|
47 |
+
$model = $model->where($field, $value);
|
48 |
+
}
|
49 |
+
}
|
50 |
+
$model = $model->findOne();
|
51 |
+
}
|
52 |
+
|
53 |
+
if($model === false) {
|
54 |
+
if(!empty($onCreate)) {
|
55 |
+
$data = $onCreate($data);
|
56 |
+
}
|
57 |
+
$model = static::create();
|
58 |
+
$model->hydrate($data);
|
59 |
+
} else {
|
60 |
+
unset($data['id']);
|
61 |
+
$model->set($data);
|
62 |
+
}
|
63 |
+
|
64 |
+
return $model->save();
|
65 |
+
}
|
66 |
+
|
67 |
+
static public function createOrUpdate($data = array()) {
|
68 |
+
return self::_createOrUpdate($data);
|
69 |
+
}
|
70 |
+
|
71 |
function getErrors() {
|
72 |
if(empty($this->_errors)) {
|
73 |
return false;
|
lib/Models/Newsletter.php
CHANGED
@@ -793,15 +793,7 @@ class Newsletter extends Model {
|
|
793 |
}
|
794 |
|
795 |
static function createOrUpdate($data = array()) {
|
796 |
-
$
|
797 |
-
|
798 |
-
if(isset($data['id']) && (int)$data['id'] > 0) {
|
799 |
-
$newsletter = self::findOne((int)$data['id']);
|
800 |
-
}
|
801 |
-
|
802 |
-
if($newsletter === false) {
|
803 |
-
$newsletter = self::create();
|
804 |
-
|
805 |
// set default sender based on settings
|
806 |
if(empty($data['sender'])) {
|
807 |
$sender = Setting::getValue('sender', array());
|
@@ -832,14 +824,8 @@ class Newsletter extends Model {
|
|
832 |
);
|
833 |
}
|
834 |
|
835 |
-
$
|
836 |
-
}
|
837 |
-
unset($data['id']);
|
838 |
-
$newsletter->set($data);
|
839 |
-
}
|
840 |
-
|
841 |
-
$newsletter->save();
|
842 |
-
return $newsletter;
|
843 |
}
|
844 |
|
845 |
static function getWelcomeNotificationsForSegments($segments) {
|
793 |
}
|
794 |
|
795 |
static function createOrUpdate($data = array()) {
|
796 |
+
return parent::_createOrUpdate($data, false, function($data) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
797 |
// set default sender based on settings
|
798 |
if(empty($data['sender'])) {
|
799 |
$sender = Setting::getValue('sender', array());
|
824 |
);
|
825 |
}
|
826 |
|
827 |
+
return $data;
|
828 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
829 |
}
|
830 |
|
831 |
static function getWelcomeNotificationsForSegments($segments) {
|
lib/Models/NewsletterOption.php
CHANGED
@@ -7,18 +7,12 @@ class NewsletterOption extends Model {
|
|
7 |
public static $_table = MP_NEWSLETTER_OPTION_TABLE;
|
8 |
|
9 |
static function createOrUpdate($data = array()) {
|
10 |
-
if(!is_array($data) || empty($data['newsletter_id']) || empty($data['option_field_id']))
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
$newsletter_option->newsletter_id = $data['newsletter_id'];
|
19 |
-
$newsletter_option->option_field_id = $data['option_field_id'];
|
20 |
-
$newsletter_option->value = $data['value'];
|
21 |
-
$newsletter_option->save();
|
22 |
-
return $newsletter_option;
|
23 |
}
|
24 |
}
|
7 |
public static $_table = MP_NEWSLETTER_OPTION_TABLE;
|
8 |
|
9 |
static function createOrUpdate($data = array()) {
|
10 |
+
if(!is_array($data) || empty($data['newsletter_id']) || empty($data['option_field_id'])) {
|
11 |
+
return;
|
12 |
+
}
|
13 |
+
return parent::_createOrUpdate($data, array(
|
14 |
+
'option_field_id' => $data['option_field_id'],
|
15 |
+
'newsletter_id' => $data['newsletter_id']
|
16 |
+
));
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
}
|
18 |
}
|
lib/Models/NewsletterTemplate.php
CHANGED
@@ -6,6 +6,9 @@ if(!defined('ABSPATH')) exit;
|
|
6 |
class NewsletterTemplate extends Model {
|
7 |
public static $_table = MP_NEWSLETTER_TEMPLATES_TABLE;
|
8 |
|
|
|
|
|
|
|
9 |
function __construct() {
|
10 |
parent::__construct();
|
11 |
|
@@ -17,6 +20,22 @@ class NewsletterTemplate extends Model {
|
|
17 |
));
|
18 |
}
|
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
function asArray() {
|
21 |
$template = parent::asArray();
|
22 |
if(isset($template['body'])) {
|
@@ -25,22 +44,4 @@ class NewsletterTemplate extends Model {
|
|
25 |
return $template;
|
26 |
}
|
27 |
|
28 |
-
static function createOrUpdate($data = array()) {
|
29 |
-
$template = false;
|
30 |
-
|
31 |
-
if(isset($data['id']) && (int)$data['id'] > 0) {
|
32 |
-
$template = self::findOne((int)$data['id']);
|
33 |
-
}
|
34 |
-
|
35 |
-
if($template === false) {
|
36 |
-
$template = self::create();
|
37 |
-
$template->hydrate($data);
|
38 |
-
} else {
|
39 |
-
unset($data['id']);
|
40 |
-
$template->set($data);
|
41 |
-
}
|
42 |
-
|
43 |
-
$template->save();
|
44 |
-
return $template;
|
45 |
-
}
|
46 |
}
|
6 |
class NewsletterTemplate extends Model {
|
7 |
public static $_table = MP_NEWSLETTER_TEMPLATES_TABLE;
|
8 |
|
9 |
+
const RECENTLY_SENT_CATEGORIES = '["recent"]';
|
10 |
+
const RECENTLY_SENT_COUNT = 12;
|
11 |
+
|
12 |
function __construct() {
|
13 |
parent::__construct();
|
14 |
|
20 |
));
|
21 |
}
|
22 |
|
23 |
+
static function cleanRecentlySent($data) {
|
24 |
+
if(!empty($data['categories']) && $data['categories'] === self::RECENTLY_SENT_CATEGORIES) {
|
25 |
+
$ids = parent::where('categories', self::RECENTLY_SENT_CATEGORIES)
|
26 |
+
->select('id')
|
27 |
+
->orderByDesc('id')
|
28 |
+
->limit(self::RECENTLY_SENT_COUNT)
|
29 |
+
->findMany();
|
30 |
+
$ids = array_map(function ($template) {
|
31 |
+
return $template->id;
|
32 |
+
}, $ids);
|
33 |
+
parent::where('categories', self::RECENTLY_SENT_CATEGORIES)
|
34 |
+
->whereNotIn('id', $ids)
|
35 |
+
->deleteMany();
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
function asArray() {
|
40 |
$template = parent::asArray();
|
41 |
if(isset($template['body'])) {
|
44 |
return $template;
|
45 |
}
|
46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
}
|
lib/Models/ScheduledTaskSubscriber.php
CHANGED
@@ -11,20 +11,14 @@ class ScheduledTaskSubscriber extends Model {
|
|
11 |
public static $_id_column = array('task_id', 'subscriber_id');
|
12 |
|
13 |
static function createOrUpdate($data = array()) {
|
14 |
-
if(!is_array($data) || empty($data['task_id']) || empty($data['subscriber_id']))
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
$task_subscriber->task_id = $data['task_id'];
|
23 |
-
$task_subscriber->subscriber_id = $data['subscriber_id'];
|
24 |
-
$task_subscriber->processed = !empty($data['processed']) ? self::STATUS_PROCESSED : self::STATUS_UNPROCESSED;
|
25 |
-
$task_subscriber->save();
|
26 |
-
|
27 |
-
return $task_subscriber;
|
28 |
}
|
29 |
|
30 |
static function addSubscribers($task_id, array $subscriber_ids) {
|
11 |
public static $_id_column = array('task_id', 'subscriber_id');
|
12 |
|
13 |
static function createOrUpdate($data = array()) {
|
14 |
+
if(!is_array($data) || empty($data['task_id']) || empty($data['subscriber_id'])) {
|
15 |
+
return;
|
16 |
+
}
|
17 |
+
$data['processed'] = !empty($data['processed']) ? self::STATUS_PROCESSED : self::STATUS_UNPROCESSED;
|
18 |
+
return parent::_createOrUpdate($data, array(
|
19 |
+
'subscriber_id' => $data['subscriber_id'],
|
20 |
+
'task_id' => $data['task_id']
|
21 |
+
));
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
}
|
23 |
|
24 |
static function addSubscribers($task_id, array $subscriber_ids) {
|
lib/Models/Segment.php
CHANGED
@@ -219,25 +219,6 @@ class Segment extends Model {
|
|
219 |
return $query;
|
220 |
}
|
221 |
|
222 |
-
static function createOrUpdate($data = array()) {
|
223 |
-
$segment = false;
|
224 |
-
|
225 |
-
if(isset($data['id']) && (int)$data['id'] > 0) {
|
226 |
-
$segment = self::findOne((int)$data['id']);
|
227 |
-
}
|
228 |
-
|
229 |
-
if($segment === false) {
|
230 |
-
$segment = self::create();
|
231 |
-
$segment->hydrate($data);
|
232 |
-
} else {
|
233 |
-
unset($data['id']);
|
234 |
-
$segment->set($data);
|
235 |
-
}
|
236 |
-
|
237 |
-
$segment->save();
|
238 |
-
return $segment;
|
239 |
-
}
|
240 |
-
|
241 |
static function getPublic() {
|
242 |
return self::getPublished()->where('type', self::TYPE_DEFAULT)->orderByAsc('name');
|
243 |
}
|
219 |
return $query;
|
220 |
}
|
221 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
static function getPublic() {
|
223 |
return self::getPublished()->where('type', self::TYPE_DEFAULT)->orderByAsc('name');
|
224 |
}
|
lib/Models/Setting.php
CHANGED
@@ -150,20 +150,8 @@ class Setting extends Model {
|
|
150 |
}
|
151 |
|
152 |
public static function createOrUpdate($data = array()) {
|
153 |
-
$
|
154 |
-
|
155 |
-
if(isset($data['name'])) {
|
156 |
-
$setting = self::where('name', $data['name'])->findOne();
|
157 |
-
}
|
158 |
-
|
159 |
-
if($setting === false) {
|
160 |
-
$setting = self::create();
|
161 |
-
$setting->hydrate($data);
|
162 |
-
} else {
|
163 |
-
$setting->value = $data['value'];
|
164 |
-
}
|
165 |
-
|
166 |
-
return $setting->save();
|
167 |
}
|
168 |
|
169 |
public static function deleteValue($value) {
|
150 |
}
|
151 |
|
152 |
public static function createOrUpdate($data = array()) {
|
153 |
+
$keys = isset($data['name']) ? array('name' => $data['name']) : false;
|
154 |
+
return parent::_createOrUpdate($data, $keys);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
}
|
156 |
|
157 |
public static function deleteValue($value) {
|
lib/Models/SubscriberCustomField.php
CHANGED
@@ -37,18 +37,10 @@ class SubscriberCustomField extends Model {
|
|
37 |
}
|
38 |
}
|
39 |
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
if($relation === false) {
|
45 |
-
$relation = self::create();
|
46 |
-
$relation->hydrate($data);
|
47 |
-
} else {
|
48 |
-
$relation->set($data);
|
49 |
-
}
|
50 |
-
|
51 |
-
return $relation->save();
|
52 |
}
|
53 |
|
54 |
static function createMultiple($values) {
|
37 |
}
|
38 |
}
|
39 |
|
40 |
+
return parent::_createOrUpdate($data, array(
|
41 |
+
'custom_field_id' => $data['custom_field_id'],
|
42 |
+
'subscriber_id' => $data['subscriber_id']
|
43 |
+
));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
45 |
|
46 |
static function createMultiple($values) {
|
lib/Models/SubscriberSegment.php
CHANGED
@@ -151,26 +151,13 @@ class SubscriberSegment extends Model {
|
|
151 |
}
|
152 |
|
153 |
static function createOrUpdate($data = array()) {
|
154 |
-
$
|
155 |
-
|
156 |
-
if(isset($data['id']) && (int)$data['id'] > 0) {
|
157 |
-
$subscription = self::findOne((int)$data['id']);
|
158 |
-
}
|
159 |
-
|
160 |
if(isset($data['subscriber_id']) && isset($data['segment_id'])) {
|
161 |
-
$
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
if($subscription === false) {
|
167 |
-
$subscription = self::create();
|
168 |
-
$subscription->hydrate($data);
|
169 |
-
} else {
|
170 |
-
unset($data['id']);
|
171 |
-
$subscription->set($data);
|
172 |
}
|
173 |
-
|
174 |
-
return $subscription->save();
|
175 |
}
|
176 |
}
|
151 |
}
|
152 |
|
153 |
static function createOrUpdate($data = array()) {
|
154 |
+
$keys = false;
|
|
|
|
|
|
|
|
|
|
|
155 |
if(isset($data['subscriber_id']) && isset($data['segment_id'])) {
|
156 |
+
$keys = array(
|
157 |
+
'subscriber_id' => (int)$data['subscriber_id'],
|
158 |
+
'segment_id' => (int)$data['segment_id']
|
159 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
}
|
161 |
+
return parent::_createOrUpdate($data, $keys);
|
|
|
162 |
}
|
163 |
}
|
mailpoet.php
CHANGED
@@ -4,7 +4,7 @@ if(!defined('ABSPATH')) exit;
|
|
4 |
|
5 |
/*
|
6 |
* Plugin Name: MailPoet 3 (New)
|
7 |
-
* Version: 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,7 +20,7 @@ if(!defined('ABSPATH')) exit;
|
|
20 |
*/
|
21 |
|
22 |
$mailpoet_plugin = array(
|
23 |
-
'version' => '3.4.
|
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.4.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 |
*/
|
21 |
|
22 |
$mailpoet_plugin = array(
|
23 |
+
'version' => '3.4.2',
|
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.4.
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -116,6 +116,11 @@ Stop by our [support site](https://www.mailpoet.com/support).
|
|
116 |
|
117 |
== Changelog ==
|
118 |
|
|
|
|
|
|
|
|
|
|
|
119 |
= 3.4.1 - 2018-02-06 =
|
120 |
* Fixed: previously saved templates are now under "Your saved templates";
|
121 |
* Improved: imported templates with no matching category are now added to "Your saved templates".
|
4 |
Requires at least: 4.7
|
5 |
Tested up to: 4.9
|
6 |
Requires PHP: 5.3
|
7 |
+
Stable tag: 3.4.2
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
116 |
|
117 |
== Changelog ==
|
118 |
|
119 |
+
= 3.4.2 - 2018-02-13 =
|
120 |
+
* Premium: you can now segment your subscribers by opened/clicked/unopened events;
|
121 |
+
* Improved: default post search parameters inside newsletter editor can be manually changed using a custom WordPress filter. Thanks Jose Salazar;
|
122 |
+
* Fixed: saving email templates when website uses both HTTP and HTTPS protocols.
|
123 |
+
|
124 |
= 3.4.1 - 2018-02-06 =
|
125 |
* Fixed: previously saved templates are now under "Your saved templates";
|
126 |
* Improved: imported templates with no matching category are now added to "Your saved templates".
|
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 ComposerAutoloaderInit35eaa820f39f9d0aceb2d2697a7fa90c::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit1540fc5119aa91bb83bcddb25ab5cc21
|
|
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 ComposerAutoloaderInit1540fc5119aa91bb83bcddb25ab5cc21
|
|
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 ComposerAutoloaderInit35eaa820f39f9d0aceb2d2697a7fa90c
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit35eaa820f39f9d0aceb2d2697a7fa90c', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit35eaa820f39f9d0aceb2d2697a7fa90c', '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\ComposerStaticInit35eaa820f39f9d0aceb2d2697a7fa90c::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\ComposerStaticInit35eaa820f39f9d0aceb2d2697a7fa90c::$files;
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequire35eaa820f39f9d0aceb2d2697a7fa90c($fileIdentifier, $file);
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
+
function composerRequire35eaa820f39f9d0aceb2d2697a7fa90c($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',
|
@@ -985,10 +985,10 @@ class ComposerStaticInit1540fc5119aa91bb83bcddb25ab5cc21
|
|
985 |
public static function getInitializer(ClassLoader $loader)
|
986 |
{
|
987 |
return \Closure::bind(function () use ($loader) {
|
988 |
-
$loader->prefixLengthsPsr4 =
|
989 |
-
$loader->prefixDirsPsr4 =
|
990 |
-
$loader->prefixesPsr0 =
|
991 |
-
$loader->classMap =
|
992 |
|
993 |
}, null, ClassLoader::class);
|
994 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit35eaa820f39f9d0aceb2d2697a7fa90c
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
985 |
public static function getInitializer(ClassLoader $loader)
|
986 |
{
|
987 |
return \Closure::bind(function () use ($loader) {
|
988 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit35eaa820f39f9d0aceb2d2697a7fa90c::$prefixLengthsPsr4;
|
989 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit35eaa820f39f9d0aceb2d2697a7fa90c::$prefixDirsPsr4;
|
990 |
+
$loader->prefixesPsr0 = ComposerStaticInit35eaa820f39f9d0aceb2d2697a7fa90c::$prefixesPsr0;
|
991 |
+
$loader->classMap = ComposerStaticInit35eaa820f39f9d0aceb2d2697a7fa90c::$classMap;
|
992 |
|
993 |
}, null, ClassLoader::class);
|
994 |
}
|
views/newsletters.html
CHANGED
@@ -270,7 +270,9 @@
|
|
270 |
'savedTemplates': __('Your saved templates'),
|
271 |
'blank': _x('Blank', 'Blank newsletters templates category'),
|
272 |
'sample': _x('Sample', 'Sample newsletters templates category'),
|
273 |
-
'noTemplates': __('This category does not contain any template yet!')
|
|
|
|
|
274 |
}) %>
|
275 |
<% endblock %>
|
276 |
|
270 |
'savedTemplates': __('Your saved templates'),
|
271 |
'blank': _x('Blank', 'Blank newsletters templates category'),
|
272 |
'sample': _x('Sample', 'Sample newsletters templates category'),
|
273 |
+
'noTemplates': __('This category does not contain any template yet!'),
|
274 |
+
|
275 |
+
'errorWhileTakingScreenshot': __('An error occured while saving the template in "Recently sent"')
|
276 |
}) %>
|
277 |
<% endblock %>
|
278 |
|