Version Description
- 2017-01-10 =
- Improved: faster load times of Emails page with large database;
- Improved: sender header is now set for SMTP/PHPMail method to work with MS Exchange. Thx Karsten!;
- Improved: better asset conflict management with other plugins;
- Fixed: newly published custom post types are now sent. Thx Jim!;
- Fixed: post notifications now send when ALC block is configured to display titles only. Thx Pete;
- Fixed: shortcode "date:dtext" displays full name (e.g., Sunday) instead of abbreviated (e.g., Sun);
- Fixed: hide mailer error on send previews. Thx Karsten again!;
- Fixed: various minor issues.
Download this release
Release Info
Developer | wysija |
Plugin | MailPoet Newsletters (New) |
Version | 3.0.0-beta.12 |
Comparing to | |
See all releases |
Code changes from version 3.0.0-beta.11 to 3.0.0-beta.12
- assets/js/admin.js +62 -48
- assets/js/lib/tinymce/package.json +2 -2
- assets/js/mailpoet.js +8 -10
- assets/js/newsletter_editor.js +1 -2
- assets/js/public.js +6 -6
- lang/index.php +3 -0
- lang/mailpoet.pot +10 -10
- lib/API/Endpoints/Newsletters.php +1 -1
- lib/Config/Hooks.php +8 -5
- lib/Config/Initializer.php +1 -1
- lib/Config/Migrator.php +3 -3
- lib/Config/Widget.php +15 -21
- lib/Cron/CronHelper.php +19 -3
- lib/Cron/Daemon.php +6 -2
- lib/Mailer/Methods/PHPMail.php +1 -0
- lib/Mailer/Methods/SMTP.php +1 -0
- lib/Newsletter/Editor/TitleListTransformer.php +1 -1
- lib/Newsletter/Shortcodes/Categories/Date.php +13 -4
- lib/Newsletter/Shortcodes/Categories/Link.php +2 -1
- lib/Newsletter/Shortcodes/Categories/Newsletter.php +2 -1
- lib/Newsletter/Shortcodes/Categories/Subscriber.php +5 -1
- lib/Newsletter/Shortcodes/Shortcodes.php +8 -4
- lib/Router/Endpoints/CronDaemon.php +38 -0
- lib/Router/Endpoints/Queue.php +0 -22
- lib/Router/Router.php +4 -3
- mailpoet.php +2 -2
- readme.txt +11 -1
- vendor/autoload.php +2 -2
- vendor/composer/ClassLoader.php +10 -38
- vendor/composer/autoload_classmap.php +1 -1
- vendor/composer/autoload_real.php +8 -8
- vendor/composer/autoload_static.php +6 -6
- vendor/composer/installed.json +11 -11
assets/js/admin.js
CHANGED
@@ -712,17 +712,6 @@ webpackJsonp([0],[
|
|
712 |
}
|
713 |
};
|
714 |
|
715 |
-
var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
|
716 |
-
var Klass = this;
|
717 |
-
if (Klass.instancePool.length) {
|
718 |
-
var instance = Klass.instancePool.pop();
|
719 |
-
Klass.call(instance, a1, a2, a3, a4, a5);
|
720 |
-
return instance;
|
721 |
-
} else {
|
722 |
-
return new Klass(a1, a2, a3, a4, a5);
|
723 |
-
}
|
724 |
-
};
|
725 |
-
|
726 |
var standardReleaser = function (instance) {
|
727 |
var Klass = this;
|
728 |
!(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
|
@@ -762,8 +751,7 @@ webpackJsonp([0],[
|
|
762 |
oneArgumentPooler: oneArgumentPooler,
|
763 |
twoArgumentPooler: twoArgumentPooler,
|
764 |
threeArgumentPooler: threeArgumentPooler,
|
765 |
-
fourArgumentPooler: fourArgumentPooler
|
766 |
-
fiveArgumentPooler: fiveArgumentPooler
|
767 |
};
|
768 |
|
769 |
module.exports = PooledClass;
|
@@ -3103,7 +3091,14 @@ webpackJsonp([0],[
|
|
3103 |
// We warn in this case but don't throw. We expect the element creation to
|
3104 |
// succeed and there will likely be errors in render.
|
3105 |
if (!validType) {
|
3106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3107 |
}
|
3108 |
|
3109 |
var element = ReactElement.createElement.apply(this, arguments);
|
@@ -4074,7 +4069,7 @@ webpackJsonp([0],[
|
|
4074 |
|
4075 |
'use strict';
|
4076 |
|
4077 |
-
module.exports = '15.4.
|
4078 |
|
4079 |
/***/ },
|
4080 |
/* 32 */
|
@@ -4272,6 +4267,13 @@ webpackJsonp([0],[
|
|
4272 |
|
4273 |
var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
|
4274 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4275 |
/**
|
4276 |
* Drill down (through composites and empty components) until we get a host or
|
4277 |
* host text component.
|
@@ -4337,7 +4339,7 @@ webpackJsonp([0],[
|
|
4337 |
}
|
4338 |
// We assume the child nodes are in the same order as the child instances.
|
4339 |
for (; childNode !== null; childNode = childNode.nextSibling) {
|
4340 |
-
if (
|
4341 |
precacheNode(childInst, childNode);
|
4342 |
continue outer;
|
4343 |
}
|
@@ -6667,17 +6669,6 @@ webpackJsonp([0],[
|
|
6667 |
}
|
6668 |
};
|
6669 |
|
6670 |
-
var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
|
6671 |
-
var Klass = this;
|
6672 |
-
if (Klass.instancePool.length) {
|
6673 |
-
var instance = Klass.instancePool.pop();
|
6674 |
-
Klass.call(instance, a1, a2, a3, a4, a5);
|
6675 |
-
return instance;
|
6676 |
-
} else {
|
6677 |
-
return new Klass(a1, a2, a3, a4, a5);
|
6678 |
-
}
|
6679 |
-
};
|
6680 |
-
|
6681 |
var standardReleaser = function (instance) {
|
6682 |
var Klass = this;
|
6683 |
!(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
|
@@ -6717,8 +6708,7 @@ webpackJsonp([0],[
|
|
6717 |
oneArgumentPooler: oneArgumentPooler,
|
6718 |
twoArgumentPooler: twoArgumentPooler,
|
6719 |
threeArgumentPooler: threeArgumentPooler,
|
6720 |
-
fourArgumentPooler: fourArgumentPooler
|
6721 |
-
fiveArgumentPooler: fiveArgumentPooler
|
6722 |
};
|
6723 |
|
6724 |
module.exports = PooledClass;
|
@@ -11536,12 +11526,18 @@ webpackJsonp([0],[
|
|
11536 |
} else {
|
11537 |
var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
|
11538 |
var childrenToUse = contentToUse != null ? null : props.children;
|
|
|
11539 |
if (contentToUse != null) {
|
11540 |
-
//
|
11541 |
-
|
11542 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
11543 |
}
|
11544 |
-
DOMLazyTree.queueText(lazyTree, contentToUse);
|
11545 |
} else if (childrenToUse != null) {
|
11546 |
var mountImages = this.mountChildren(childrenToUse, transaction, context);
|
11547 |
for (var i = 0; i < mountImages.length; i++) {
|
@@ -13461,7 +13457,17 @@ webpackJsonp([0],[
|
|
13461 |
}
|
13462 |
} else {
|
13463 |
if (props.value == null && props.defaultValue != null) {
|
13464 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13465 |
}
|
13466 |
if (props.checked == null && props.defaultChecked != null) {
|
13467 |
node.defaultChecked = !!props.defaultChecked;
|
@@ -14208,9 +14214,15 @@ webpackJsonp([0],[
|
|
14208 |
// This is in postMount because we need access to the DOM node, which is not
|
14209 |
// available until after the component has mounted.
|
14210 |
var node = ReactDOMComponentTree.getNodeFromInstance(inst);
|
|
|
14211 |
|
14212 |
-
//
|
14213 |
-
|
|
|
|
|
|
|
|
|
|
|
14214 |
}
|
14215 |
};
|
14216 |
|
@@ -15012,7 +15024,17 @@ webpackJsonp([0],[
|
|
15012 |
instance = ReactEmptyComponent.create(instantiateReactComponent);
|
15013 |
} else if (typeof node === 'object') {
|
15014 |
var element = node;
|
15015 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15016 |
|
15017 |
// Special case string values
|
15018 |
if (typeof element.type === 'string') {
|
@@ -15302,7 +15324,7 @@ webpackJsonp([0],[
|
|
15302 |
// Since plain JS classes are defined without any special initialization
|
15303 |
// logic, we can not catch common errors early. Therefore, we have to
|
15304 |
// catch them here, at initialization time, instead.
|
15305 |
-
process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;
|
15306 |
process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;
|
15307 |
process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;
|
15308 |
process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;
|
@@ -16306,14 +16328,11 @@ webpackJsonp([0],[
|
|
16306 |
|
16307 |
'use strict';
|
16308 |
|
16309 |
-
var _prodInvariant = __webpack_require__(36)
|
16310 |
-
_assign = __webpack_require__(51);
|
16311 |
|
16312 |
var invariant = __webpack_require__(9);
|
16313 |
|
16314 |
var genericComponentClass = null;
|
16315 |
-
// This registry keeps track of wrapper classes around host tags.
|
16316 |
-
var tagToComponentClass = {};
|
16317 |
var textComponentClass = null;
|
16318 |
|
16319 |
var ReactHostComponentInjection = {
|
@@ -16326,11 +16345,6 @@ webpackJsonp([0],[
|
|
16326 |
// rendered as props.
|
16327 |
injectTextComponentClass: function (componentClass) {
|
16328 |
textComponentClass = componentClass;
|
16329 |
-
},
|
16330 |
-
// This accepts a keyed object with classes as values. Each key represents a
|
16331 |
-
// tag. That particular tag will use this class instead of the generic one.
|
16332 |
-
injectComponentClasses: function (componentClasses) {
|
16333 |
-
_assign(tagToComponentClass, componentClasses);
|
16334 |
}
|
16335 |
};
|
16336 |
|
@@ -21185,7 +21199,7 @@ webpackJsonp([0],[
|
|
21185 |
|
21186 |
'use strict';
|
21187 |
|
21188 |
-
module.exports = '15.4.
|
21189 |
|
21190 |
/***/ },
|
21191 |
/* 174 */
|
712 |
}
|
713 |
};
|
714 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
715 |
var standardReleaser = function (instance) {
|
716 |
var Klass = this;
|
717 |
!(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
|
751 |
oneArgumentPooler: oneArgumentPooler,
|
752 |
twoArgumentPooler: twoArgumentPooler,
|
753 |
threeArgumentPooler: threeArgumentPooler,
|
754 |
+
fourArgumentPooler: fourArgumentPooler
|
|
|
755 |
};
|
756 |
|
757 |
module.exports = PooledClass;
|
3091 |
// We warn in this case but don't throw. We expect the element creation to
|
3092 |
// succeed and there will likely be errors in render.
|
3093 |
if (!validType) {
|
3094 |
+
if (typeof type !== 'function' && typeof type !== 'string') {
|
3095 |
+
var info = '';
|
3096 |
+
if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
|
3097 |
+
info += ' You likely forgot to export your component from the file ' + 'it\'s defined in.';
|
3098 |
+
}
|
3099 |
+
info += getDeclarationErrorAddendum();
|
3100 |
+
process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', type == null ? type : typeof type, info) : void 0;
|
3101 |
+
}
|
3102 |
}
|
3103 |
|
3104 |
var element = ReactElement.createElement.apply(this, arguments);
|
4069 |
|
4070 |
'use strict';
|
4071 |
|
4072 |
+
module.exports = '15.4.2';
|
4073 |
|
4074 |
/***/ },
|
4075 |
/* 32 */
|
4267 |
|
4268 |
var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
|
4269 |
|
4270 |
+
/**
|
4271 |
+
* Check if a given node should be cached.
|
4272 |
+
*/
|
4273 |
+
function shouldPrecacheNode(node, nodeID) {
|
4274 |
+
return node.nodeType === 1 && node.getAttribute(ATTR_NAME) === String(nodeID) || node.nodeType === 8 && node.nodeValue === ' react-text: ' + nodeID + ' ' || node.nodeType === 8 && node.nodeValue === ' react-empty: ' + nodeID + ' ';
|
4275 |
+
}
|
4276 |
+
|
4277 |
/**
|
4278 |
* Drill down (through composites and empty components) until we get a host or
|
4279 |
* host text component.
|
4339 |
}
|
4340 |
// We assume the child nodes are in the same order as the child instances.
|
4341 |
for (; childNode !== null; childNode = childNode.nextSibling) {
|
4342 |
+
if (shouldPrecacheNode(childNode, childID)) {
|
4343 |
precacheNode(childInst, childNode);
|
4344 |
continue outer;
|
4345 |
}
|
6669 |
}
|
6670 |
};
|
6671 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6672 |
var standardReleaser = function (instance) {
|
6673 |
var Klass = this;
|
6674 |
!(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
|
6708 |
oneArgumentPooler: oneArgumentPooler,
|
6709 |
twoArgumentPooler: twoArgumentPooler,
|
6710 |
threeArgumentPooler: threeArgumentPooler,
|
6711 |
+
fourArgumentPooler: fourArgumentPooler
|
|
|
6712 |
};
|
6713 |
|
6714 |
module.exports = PooledClass;
|
11526 |
} else {
|
11527 |
var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
|
11528 |
var childrenToUse = contentToUse != null ? null : props.children;
|
11529 |
+
// TODO: Validate that text is allowed as a child of this node
|
11530 |
if (contentToUse != null) {
|
11531 |
+
// Avoid setting textContent when the text is empty. In IE11 setting
|
11532 |
+
// textContent on a text area will cause the placeholder to not
|
11533 |
+
// show within the textarea until it has been focused and blurred again.
|
11534 |
+
// https://github.com/facebook/react/issues/6731#issuecomment-254874553
|
11535 |
+
if (contentToUse !== '') {
|
11536 |
+
if (process.env.NODE_ENV !== 'production') {
|
11537 |
+
setAndValidateContentChildDev.call(this, contentToUse);
|
11538 |
+
}
|
11539 |
+
DOMLazyTree.queueText(lazyTree, contentToUse);
|
11540 |
}
|
|
|
11541 |
} else if (childrenToUse != null) {
|
11542 |
var mountImages = this.mountChildren(childrenToUse, transaction, context);
|
11543 |
for (var i = 0; i < mountImages.length; i++) {
|
13457 |
}
|
13458 |
} else {
|
13459 |
if (props.value == null && props.defaultValue != null) {
|
13460 |
+
// In Chrome, assigning defaultValue to certain input types triggers input validation.
|
13461 |
+
// For number inputs, the display value loses trailing decimal points. For email inputs,
|
13462 |
+
// Chrome raises "The specified value <x> is not a valid email address".
|
13463 |
+
//
|
13464 |
+
// Here we check to see if the defaultValue has actually changed, avoiding these problems
|
13465 |
+
// when the user is inputting text
|
13466 |
+
//
|
13467 |
+
// https://github.com/facebook/react/issues/7253
|
13468 |
+
if (node.defaultValue !== '' + props.defaultValue) {
|
13469 |
+
node.defaultValue = '' + props.defaultValue;
|
13470 |
+
}
|
13471 |
}
|
13472 |
if (props.checked == null && props.defaultChecked != null) {
|
13473 |
node.defaultChecked = !!props.defaultChecked;
|
14214 |
// This is in postMount because we need access to the DOM node, which is not
|
14215 |
// available until after the component has mounted.
|
14216 |
var node = ReactDOMComponentTree.getNodeFromInstance(inst);
|
14217 |
+
var textContent = node.textContent;
|
14218 |
|
14219 |
+
// Only set node.value if textContent is equal to the expected
|
14220 |
+
// initial value. In IE10/IE11 there is a bug where the placeholder attribute
|
14221 |
+
// will populate textContent as well.
|
14222 |
+
// https://developer.microsoft.com/microsoft-edge/platform/issues/101525/
|
14223 |
+
if (textContent === inst._wrapperState.initialValue) {
|
14224 |
+
node.value = textContent;
|
14225 |
+
}
|
14226 |
}
|
14227 |
};
|
14228 |
|
15024 |
instance = ReactEmptyComponent.create(instantiateReactComponent);
|
15025 |
} else if (typeof node === 'object') {
|
15026 |
var element = node;
|
15027 |
+
var type = element.type;
|
15028 |
+
if (typeof type !== 'function' && typeof type !== 'string') {
|
15029 |
+
var info = '';
|
15030 |
+
if (process.env.NODE_ENV !== 'production') {
|
15031 |
+
if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
|
15032 |
+
info += ' You likely forgot to export your component from the file ' + 'it\'s defined in.';
|
15033 |
+
}
|
15034 |
+
}
|
15035 |
+
info += getDeclarationErrorAddendum(element._owner);
|
15036 |
+
true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', type == null ? type : typeof type, info) : _prodInvariant('130', type == null ? type : typeof type, info) : void 0;
|
15037 |
+
}
|
15038 |
|
15039 |
// Special case string values
|
15040 |
if (typeof element.type === 'string') {
|
15324 |
// Since plain JS classes are defined without any special initialization
|
15325 |
// logic, we can not catch common errors early. Therefore, we have to
|
15326 |
// catch them here, at initialization time, instead.
|
15327 |
+
process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved || inst.state, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;
|
15328 |
process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;
|
15329 |
process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;
|
15330 |
process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;
|
16328 |
|
16329 |
'use strict';
|
16330 |
|
16331 |
+
var _prodInvariant = __webpack_require__(36);
|
|
|
16332 |
|
16333 |
var invariant = __webpack_require__(9);
|
16334 |
|
16335 |
var genericComponentClass = null;
|
|
|
|
|
16336 |
var textComponentClass = null;
|
16337 |
|
16338 |
var ReactHostComponentInjection = {
|
16345 |
// rendered as props.
|
16346 |
injectTextComponentClass: function (componentClass) {
|
16347 |
textComponentClass = componentClass;
|
|
|
|
|
|
|
|
|
|
|
16348 |
}
|
16349 |
};
|
16350 |
|
21199 |
|
21200 |
'use strict';
|
21201 |
|
21202 |
+
module.exports = '15.4.2';
|
21203 |
|
21204 |
/***/ },
|
21205 |
/* 174 */
|
assets/js/lib/tinymce/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
"spec": "4.3.12",
|
11 |
"type": "version"
|
12 |
},
|
13 |
-
"/
|
14 |
]
|
15 |
],
|
16 |
"_from": "tinymce@4.3.12",
|
@@ -44,7 +44,7 @@
|
|
44 |
"_shasum": "c9f847f897f604e1621432589df9d5dcb3c13b36",
|
45 |
"_shrinkwrap": null,
|
46 |
"_spec": "tinymce@4.3.12",
|
47 |
-
"_where": "/
|
48 |
"bugs": {
|
49 |
"url": "http://www.tinymce.com/develop/bugtracker.php"
|
50 |
},
|
10 |
"spec": "4.3.12",
|
11 |
"type": "version"
|
12 |
},
|
13 |
+
"/var/www/mailpoet"
|
14 |
]
|
15 |
],
|
16 |
"_from": "tinymce@4.3.12",
|
44 |
"_shasum": "c9f847f897f604e1621432589df9d5dcb3c13b36",
|
45 |
"_shrinkwrap": null,
|
46 |
"_spec": "tinymce@4.3.12",
|
47 |
+
"_where": "/var/www/mailpoet",
|
48 |
"bugs": {
|
49 |
"url": "http://www.tinymce.com/develop/bugtracker.php"
|
50 |
},
|
assets/js/mailpoet.js
CHANGED
@@ -17076,11 +17076,9 @@ webpackJsonp([2],[
|
|
17076 |
/***/ function(module, exports, __webpack_require__) {
|
17077 |
|
17078 |
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
|
17079 |
-
__webpack_require__(267)
|
17080 |
-
__webpack_require__(270),
|
17081 |
], __WEBPACK_AMD_DEFINE_RESULT__ = function(
|
17082 |
-
MailPoet
|
17083 |
-
_
|
17084 |
) {
|
17085 |
'use strict';
|
17086 |
|
@@ -18057,7 +18055,7 @@ webpackJsonp([2],[
|
|
18057 |
|
18058 |
/* WEBPACK VAR INJECTION */(function(global) {/*!
|
18059 |
* Parsley.js
|
18060 |
-
* Version 2.6.
|
18061 |
* http://parsleyjs.org
|
18062 |
* Guillaume Potier - <guillaume@wisembly.com>
|
18063 |
* Marc-Andre Lafortune - <petroselinum@marc-andre.ca>
|
@@ -19743,13 +19741,13 @@ webpackJsonp([2],[
|
|
19743 |
if ('string' === typeof this.$element.attr('pattern')) this.addConstraint('pattern', this.$element.attr('pattern'), undefined, true);
|
19744 |
|
19745 |
// range
|
19746 |
-
if ('undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true);
|
19747 |
|
19748 |
// HTML5 min
|
19749 |
-
else if ('undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true);
|
19750 |
|
19751 |
// HTML5 max
|
19752 |
-
else if ('undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true);
|
19753 |
|
19754 |
// length
|
19755 |
if ('undefined' !== typeof this.$element.attr('minlength') && 'undefined' !== typeof this.$element.attr('maxlength')) this.addConstraint('length', [this.$element.attr('minlength'), this.$element.attr('maxlength')], undefined, true);
|
@@ -19940,7 +19938,7 @@ webpackJsonp([2],[
|
|
19940 |
ParsleyFactory.prototype = {
|
19941 |
init: function init(options) {
|
19942 |
this.__class__ = 'Parsley';
|
19943 |
-
this.__version__ = '2.6.
|
19944 |
this.__id__ = ParsleyUtils__default.generateID();
|
19945 |
|
19946 |
// Pre-compute options
|
@@ -20062,7 +20060,7 @@ webpackJsonp([2],[
|
|
20062 |
actualizeOptions: null,
|
20063 |
_resetOptions: null,
|
20064 |
Factory: ParsleyFactory,
|
20065 |
-
version: '2.6.
|
20066 |
});
|
20067 |
|
20068 |
// Supplement ParsleyField and Form with ParsleyAbstract
|
17076 |
/***/ function(module, exports, __webpack_require__) {
|
17077 |
|
17078 |
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
|
17079 |
+
__webpack_require__(267)
|
|
|
17080 |
], __WEBPACK_AMD_DEFINE_RESULT__ = function(
|
17081 |
+
MailPoet
|
|
|
17082 |
) {
|
17083 |
'use strict';
|
17084 |
|
18055 |
|
18056 |
/* WEBPACK VAR INJECTION */(function(global) {/*!
|
18057 |
* Parsley.js
|
18058 |
+
* Version 2.6.2 - built Wed, Jan 4th 2017, 8:58 am
|
18059 |
* http://parsleyjs.org
|
18060 |
* Guillaume Potier - <guillaume@wisembly.com>
|
18061 |
* Marc-Andre Lafortune - <petroselinum@marc-andre.ca>
|
19741 |
if ('string' === typeof this.$element.attr('pattern')) this.addConstraint('pattern', this.$element.attr('pattern'), undefined, true);
|
19742 |
|
19743 |
// range
|
19744 |
+
if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true);
|
19745 |
|
19746 |
// HTML5 min
|
19747 |
+
else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true);
|
19748 |
|
19749 |
// HTML5 max
|
19750 |
+
else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true);
|
19751 |
|
19752 |
// length
|
19753 |
if ('undefined' !== typeof this.$element.attr('minlength') && 'undefined' !== typeof this.$element.attr('maxlength')) this.addConstraint('length', [this.$element.attr('minlength'), this.$element.attr('maxlength')], undefined, true);
|
19938 |
ParsleyFactory.prototype = {
|
19939 |
init: function init(options) {
|
19940 |
this.__class__ = 'Parsley';
|
19941 |
+
this.__version__ = '2.6.2';
|
19942 |
this.__id__ = ParsleyUtils__default.generateID();
|
19943 |
|
19944 |
// Pre-compute options
|
20060 |
actualizeOptions: null,
|
20061 |
_resetOptions: null,
|
20062 |
Factory: ParsleyFactory,
|
20063 |
+
version: '2.6.2'
|
20064 |
});
|
20065 |
|
20066 |
// Supplement ParsleyField and Form with ParsleyAbstract
|
assets/js/newsletter_editor.js
CHANGED
@@ -27936,12 +27936,11 @@ webpackJsonp([3],{
|
|
27936 |
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
|
27937 |
__webpack_require__(431),
|
27938 |
__webpack_require__(451),
|
27939 |
-
__webpack_require__(452),
|
27940 |
__webpack_require__(266),
|
27941 |
__webpack_require__(270),
|
27942 |
__webpack_require__(434),
|
27943 |
__webpack_require__(464)
|
27944 |
-
], __WEBPACK_AMD_DEFINE_RESULT__ = function(Backbone, Marionette,
|
27945 |
|
27946 |
var app = new Marionette.Application(), AppView;
|
27947 |
|
27936 |
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
|
27937 |
__webpack_require__(431),
|
27938 |
__webpack_require__(451),
|
|
|
27939 |
__webpack_require__(266),
|
27940 |
__webpack_require__(270),
|
27941 |
__webpack_require__(434),
|
27942 |
__webpack_require__(464)
|
27943 |
+
], __WEBPACK_AMD_DEFINE_RESULT__ = function(Backbone, Marionette, jQuery, _, Handlebars) {
|
27944 |
|
27945 |
var app = new Marionette.Application(), AppView;
|
27946 |
|
assets/js/public.js
CHANGED
@@ -1945,7 +1945,7 @@
|
|
1945 |
|
1946 |
/* WEBPACK VAR INJECTION */(function(global) {/*!
|
1947 |
* Parsley.js
|
1948 |
-
* Version 2.6.
|
1949 |
* http://parsleyjs.org
|
1950 |
* Guillaume Potier - <guillaume@wisembly.com>
|
1951 |
* Marc-Andre Lafortune - <petroselinum@marc-andre.ca>
|
@@ -3631,13 +3631,13 @@
|
|
3631 |
if ('string' === typeof this.$element.attr('pattern')) this.addConstraint('pattern', this.$element.attr('pattern'), undefined, true);
|
3632 |
|
3633 |
// range
|
3634 |
-
if ('undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true);
|
3635 |
|
3636 |
// HTML5 min
|
3637 |
-
else if ('undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true);
|
3638 |
|
3639 |
// HTML5 max
|
3640 |
-
else if ('undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true);
|
3641 |
|
3642 |
// length
|
3643 |
if ('undefined' !== typeof this.$element.attr('minlength') && 'undefined' !== typeof this.$element.attr('maxlength')) this.addConstraint('length', [this.$element.attr('minlength'), this.$element.attr('maxlength')], undefined, true);
|
@@ -3828,7 +3828,7 @@
|
|
3828 |
ParsleyFactory.prototype = {
|
3829 |
init: function init(options) {
|
3830 |
this.__class__ = 'Parsley';
|
3831 |
-
this.__version__ = '2.6.
|
3832 |
this.__id__ = ParsleyUtils__default.generateID();
|
3833 |
|
3834 |
// Pre-compute options
|
@@ -3950,7 +3950,7 @@
|
|
3950 |
actualizeOptions: null,
|
3951 |
_resetOptions: null,
|
3952 |
Factory: ParsleyFactory,
|
3953 |
-
version: '2.6.
|
3954 |
});
|
3955 |
|
3956 |
// Supplement ParsleyField and Form with ParsleyAbstract
|
1945 |
|
1946 |
/* WEBPACK VAR INJECTION */(function(global) {/*!
|
1947 |
* Parsley.js
|
1948 |
+
* Version 2.6.2 - built Wed, Jan 4th 2017, 8:58 am
|
1949 |
* http://parsleyjs.org
|
1950 |
* Guillaume Potier - <guillaume@wisembly.com>
|
1951 |
* Marc-Andre Lafortune - <petroselinum@marc-andre.ca>
|
3631 |
if ('string' === typeof this.$element.attr('pattern')) this.addConstraint('pattern', this.$element.attr('pattern'), undefined, true);
|
3632 |
|
3633 |
// range
|
3634 |
+
if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true);
|
3635 |
|
3636 |
// HTML5 min
|
3637 |
+
else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true);
|
3638 |
|
3639 |
// HTML5 max
|
3640 |
+
else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true);
|
3641 |
|
3642 |
// length
|
3643 |
if ('undefined' !== typeof this.$element.attr('minlength') && 'undefined' !== typeof this.$element.attr('maxlength')) this.addConstraint('length', [this.$element.attr('minlength'), this.$element.attr('maxlength')], undefined, true);
|
3828 |
ParsleyFactory.prototype = {
|
3829 |
init: function init(options) {
|
3830 |
this.__class__ = 'Parsley';
|
3831 |
+
this.__version__ = '2.6.2';
|
3832 |
this.__id__ = ParsleyUtils__default.generateID();
|
3833 |
|
3834 |
// Pre-compute options
|
3950 |
actualizeOptions: null,
|
3951 |
_resetOptions: null,
|
3952 |
Factory: ParsleyFactory,
|
3953 |
+
version: '2.6.2'
|
3954 |
});
|
3955 |
|
3956 |
// Supplement ParsleyField and Form with ParsleyAbstract
|
lang/index.php
CHANGED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Silence is golden
|
lang/mailpoet.pot
CHANGED
@@ -1,14 +1,14 @@
|
|
1 |
-
# Copyright (C)
|
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:
|
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:
|
12 |
"Last-Translator: MailPoet i18n "
|
13 |
"(https://www.transifex.com/organization/wysija)\n"
|
14 |
"Language-Team: MailPoet i18n "
|
@@ -967,19 +967,19 @@ msgstr ""
|
|
967 |
msgid "Preview in a new tab"
|
968 |
msgstr ""
|
969 |
|
970 |
-
#: lib/Cron/CronHelper.php:
|
971 |
msgid "Site URL is unreachable."
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: lib/Cron/CronHelper.php:
|
975 |
msgid "Maximum execution time has been reached."
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: lib/Cron/Daemon.php:
|
979 |
msgid "Invalid or missing request data."
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: lib/Cron/Daemon.php:
|
983 |
msgid "Daemon does not exist."
|
984 |
msgstr ""
|
985 |
|
@@ -1309,17 +1309,17 @@ msgstr ""
|
|
1309 |
msgid "Click here to view media."
|
1310 |
msgstr ""
|
1311 |
|
1312 |
-
#: lib/Newsletter/Shortcodes/Categories/Link.php:
|
1313 |
#: views/newsletter/editor.html:1037
|
1314 |
msgid "Unsubscribe"
|
1315 |
msgstr ""
|
1316 |
|
1317 |
-
#: lib/Newsletter/Shortcodes/Categories/Link.php:
|
1318 |
#: views/newsletter/editor.html:1037
|
1319 |
msgid "Manage subscription"
|
1320 |
msgstr ""
|
1321 |
|
1322 |
-
#: lib/Newsletter/Shortcodes/Categories/Link.php:
|
1323 |
msgid "View in your browser"
|
1324 |
msgstr ""
|
1325 |
|
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-01-10 11:11:36+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 "
|
967 |
msgid "Preview in a new tab"
|
968 |
msgstr ""
|
969 |
|
970 |
+
#: lib/Cron/CronHelper.php:99
|
971 |
msgid "Site URL is unreachable."
|
972 |
msgstr ""
|
973 |
|
974 |
+
#: lib/Cron/CronHelper.php:105
|
975 |
msgid "Maximum execution time has been reached."
|
976 |
msgstr ""
|
977 |
|
978 |
+
#: lib/Cron/Daemon.php:30
|
979 |
msgid "Invalid or missing request data."
|
980 |
msgstr ""
|
981 |
|
982 |
+
#: lib/Cron/Daemon.php:33
|
983 |
msgid "Daemon does not exist."
|
984 |
msgstr ""
|
985 |
|
1309 |
msgid "Click here to view media."
|
1310 |
msgstr ""
|
1311 |
|
1312 |
+
#: lib/Newsletter/Shortcodes/Categories/Link.php:32
|
1313 |
#: views/newsletter/editor.html:1037
|
1314 |
msgid "Unsubscribe"
|
1315 |
msgstr ""
|
1316 |
|
1317 |
+
#: lib/Newsletter/Shortcodes/Categories/Link.php:53
|
1318 |
#: views/newsletter/editor.html:1037
|
1319 |
msgid "Manage subscription"
|
1320 |
msgstr ""
|
1321 |
|
1322 |
+
#: lib/Newsletter/Shortcodes/Categories/Link.php:77
|
1323 |
msgid "View in your browser"
|
1324 |
msgstr ""
|
1325 |
|
lib/API/Endpoints/Newsletters.php
CHANGED
@@ -284,7 +284,7 @@ class Newsletters extends APIEndpoint {
|
|
284 |
if($result['response'] === false) {
|
285 |
$error = sprintf(
|
286 |
__('The email could not be sent: %s', 'mailpoet'),
|
287 |
-
$result['
|
288 |
);
|
289 |
return $this->errorResponse(array(APIError::BAD_REQUEST => $error));
|
290 |
} else {
|
284 |
if($result['response'] === false) {
|
285 |
$error = sprintf(
|
286 |
__('The email could not be sent: %s', 'mailpoet'),
|
287 |
+
$result['error_message']
|
288 |
);
|
289 |
return $this->errorResponse(array(APIError::BAD_REQUEST => $error));
|
290 |
} else {
|
lib/Config/Hooks.php
CHANGED
@@ -169,10 +169,13 @@ class Hooks {
|
|
169 |
}
|
170 |
|
171 |
function setupPostNotifications() {
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
|
|
|
|
|
|
177 |
}
|
178 |
}
|
169 |
}
|
170 |
|
171 |
function setupPostNotifications() {
|
172 |
+
$post_types = get_post_types();
|
173 |
+
foreach($post_types as $post_type) {
|
174 |
+
add_filter(
|
175 |
+
'publish_' . $post_type,
|
176 |
+
'\MailPoet\Newsletter\Scheduler\Scheduler::schedulePostNotification',
|
177 |
+
10, 1
|
178 |
+
);
|
179 |
+
}
|
180 |
}
|
181 |
}
|
lib/Config/Initializer.php
CHANGED
@@ -39,6 +39,7 @@ class Initializer {
|
|
39 |
add_action('plugins_loaded', array($this, 'setup'));
|
40 |
add_action('init', array($this, 'onInit'));
|
41 |
add_action('widgets_init', array($this, 'setupWidget'));
|
|
|
42 |
}
|
43 |
|
44 |
function checkRequirements() {
|
@@ -109,7 +110,6 @@ class Initializer {
|
|
109 |
$this->setupAnalytics();
|
110 |
$this->setupChangelog();
|
111 |
$this->setupShortcodes();
|
112 |
-
$this->setupHooks();
|
113 |
$this->setupImages();
|
114 |
$this->setupCronTrigger();
|
115 |
|
39 |
add_action('plugins_loaded', array($this, 'setup'));
|
40 |
add_action('init', array($this, 'onInit'));
|
41 |
add_action('widgets_init', array($this, 'setupWidget'));
|
42 |
+
add_action('wp_loaded', array($this, 'setupHooks'));
|
43 |
}
|
44 |
|
45 |
function checkRequirements() {
|
110 |
$this->setupAnalytics();
|
111 |
$this->setupChangelog();
|
112 |
$this->setupShortcodes();
|
|
|
113 |
$this->setupImages();
|
114 |
$this->setupCronTrigger();
|
115 |
|
lib/Config/Migrator.php
CHANGED
@@ -316,7 +316,7 @@ class Migrator {
|
|
316 |
'created_at TIMESTAMP NULL,',
|
317 |
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
|
318 |
'PRIMARY KEY (id),',
|
319 |
-
'KEY
|
320 |
);
|
321 |
return $this->sqlify(__FUNCTION__, $attributes);
|
322 |
}
|
@@ -329,7 +329,7 @@ class Migrator {
|
|
329 |
'queue_id mediumint(9) NOT NULL,',
|
330 |
'created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,',
|
331 |
'PRIMARY KEY (id),',
|
332 |
-
'KEY
|
333 |
);
|
334 |
return $this->sqlify(__FUNCTION__, $attributes);
|
335 |
}
|
@@ -342,7 +342,7 @@ class Migrator {
|
|
342 |
'queue_id mediumint(9) NOT NULL,',
|
343 |
'created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,',
|
344 |
'PRIMARY KEY (id),',
|
345 |
-
'KEY
|
346 |
);
|
347 |
return $this->sqlify(__FUNCTION__, $attributes);
|
348 |
}
|
316 |
'created_at TIMESTAMP NULL,',
|
317 |
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
|
318 |
'PRIMARY KEY (id),',
|
319 |
+
'KEY queue_id (queue_id)',
|
320 |
);
|
321 |
return $this->sqlify(__FUNCTION__, $attributes);
|
322 |
}
|
329 |
'queue_id mediumint(9) NOT NULL,',
|
330 |
'created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,',
|
331 |
'PRIMARY KEY (id),',
|
332 |
+
'KEY queue_id (queue_id)',
|
333 |
);
|
334 |
return $this->sqlify(__FUNCTION__, $attributes);
|
335 |
}
|
342 |
'queue_id mediumint(9) NOT NULL,',
|
343 |
'created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,',
|
344 |
'PRIMARY KEY (id),',
|
345 |
+
'KEY queue_id (queue_id)',
|
346 |
);
|
347 |
return $this->sqlify(__FUNCTION__, $attributes);
|
348 |
}
|
lib/Config/Widget.php
CHANGED
@@ -21,7 +21,7 @@ class Widget {
|
|
21 |
$this->setupDependencies();
|
22 |
$this->setupIframe();
|
23 |
} else {
|
24 |
-
$this
|
25 |
}
|
26 |
}
|
27 |
|
@@ -110,26 +110,20 @@ class Widget {
|
|
110 |
));
|
111 |
}
|
112 |
|
113 |
-
function
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
Env::$assets_url.'/js/mailpoet.js',
|
128 |
-
array(),
|
129 |
-
Env::$version,
|
130 |
-
true
|
131 |
-
);
|
132 |
-
}
|
133 |
}
|
134 |
|
135 |
// TODO: extract this method into an Initializer
|
21 |
$this->setupDependencies();
|
22 |
$this->setupIframe();
|
23 |
} else {
|
24 |
+
add_action('widgets_admin_page', array($this, 'setupAdminWidgetPageDependencies'));
|
25 |
}
|
26 |
}
|
27 |
|
110 |
));
|
111 |
}
|
112 |
|
113 |
+
function setupAdminWidgetPageDependencies() {
|
114 |
+
wp_enqueue_script('mailpoet_vendor',
|
115 |
+
Env::$assets_url.'/js/vendor.js',
|
116 |
+
array(),
|
117 |
+
Env::$version,
|
118 |
+
true
|
119 |
+
);
|
120 |
+
|
121 |
+
wp_enqueue_script('mailpoet_admin',
|
122 |
+
Env::$assets_url.'/js/mailpoet.js',
|
123 |
+
array(),
|
124 |
+
Env::$version,
|
125 |
+
true
|
126 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
}
|
128 |
|
129 |
// TODO: extract this method into an Initializer
|
lib/Cron/CronHelper.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
namespace MailPoet\Cron;
|
3 |
|
4 |
use MailPoet\Models\Setting;
|
5 |
-
use MailPoet\Router\Endpoints\
|
6 |
use MailPoet\Router\Router;
|
7 |
use MailPoet\Util\Security;
|
8 |
|
@@ -46,11 +46,27 @@ class CronHelper {
|
|
46 |
return Security::generateRandomString();
|
47 |
}
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
static function accessDaemon($token, $timeout = self::DAEMON_REQUEST_TIMEOUT) {
|
50 |
$data = array('token' => $token);
|
51 |
$url = Router::buildRequest(
|
52 |
-
|
53 |
-
|
54 |
$data
|
55 |
);
|
56 |
$url = str_replace(home_url(), self::getSiteUrl(), $url);
|
2 |
namespace MailPoet\Cron;
|
3 |
|
4 |
use MailPoet\Models\Setting;
|
5 |
+
use MailPoet\Router\Endpoints\CronDaemon as CronDaemonEndpoint;
|
6 |
use MailPoet\Router\Router;
|
7 |
use MailPoet\Util\Security;
|
8 |
|
46 |
return Security::generateRandomString();
|
47 |
}
|
48 |
|
49 |
+
static function pingDaemon() {
|
50 |
+
$url = Router::buildRequest(
|
51 |
+
CronDaemonEndpoint::ENDPOINT,
|
52 |
+
CronDaemonEndpoint::ACTION_PING_RESPONSE
|
53 |
+
);
|
54 |
+
$url = str_replace(home_url(), self::getSiteUrl(), $url);
|
55 |
+
$args = array(
|
56 |
+
'blocking' => true,
|
57 |
+
'sslverify' => false,
|
58 |
+
'timeout' => self::DAEMON_REQUEST_TIMEOUT,
|
59 |
+
'user-agent' => 'MailPoet (www.mailpoet.com) Cron'
|
60 |
+
);
|
61 |
+
$result = wp_remote_get($url, $args);
|
62 |
+
return wp_remote_retrieve_body($result) === 'pong';
|
63 |
+
}
|
64 |
+
|
65 |
static function accessDaemon($token, $timeout = self::DAEMON_REQUEST_TIMEOUT) {
|
66 |
$data = array('token' => $token);
|
67 |
$url = Router::buildRequest(
|
68 |
+
CronDaemonEndpoint::ENDPOINT,
|
69 |
+
CronDaemonEndpoint::ACTION_RUN,
|
70 |
$data
|
71 |
);
|
72 |
$url = str_replace(home_url(), self::getSiteUrl(), $url);
|
lib/Cron/Daemon.php
CHANGED
@@ -20,6 +20,10 @@ class Daemon {
|
|
20 |
$this->timer = microtime(true);
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
23 |
function run() {
|
24 |
ignore_user_abort(true);
|
25 |
if(!$this->request_data) {
|
@@ -91,7 +95,7 @@ class Daemon {
|
|
91 |
exit;
|
92 |
}
|
93 |
|
94 |
-
function terminateRequest() {
|
95 |
-
|
96 |
}
|
97 |
}
|
20 |
$this->timer = microtime(true);
|
21 |
}
|
22 |
|
23 |
+
function ping() {
|
24 |
+
$this->terminateRequest('pong');
|
25 |
+
}
|
26 |
+
|
27 |
function run() {
|
28 |
ignore_user_abort(true);
|
29 |
if(!$this->request_data) {
|
95 |
exit;
|
96 |
}
|
97 |
|
98 |
+
function terminateRequest($message = false) {
|
99 |
+
die($message);
|
100 |
}
|
101 |
}
|
lib/Mailer/Methods/PHPMail.php
CHANGED
@@ -45,6 +45,7 @@ class PHPMail {
|
|
45 |
->setFrom(array(
|
46 |
$this->sender['from_email'] => $this->sender['from_name']
|
47 |
))
|
|
|
48 |
->setReplyTo(array(
|
49 |
$this->reply_to['reply_to_email'] => $this->reply_to['reply_to_name']
|
50 |
))
|
45 |
->setFrom(array(
|
46 |
$this->sender['from_email'] => $this->sender['from_name']
|
47 |
))
|
48 |
+
->setSender($this->sender['from_email'])
|
49 |
->setReplyTo(array(
|
50 |
$this->reply_to['reply_to_email'] => $this->reply_to['reply_to_name']
|
51 |
))
|
lib/Mailer/Methods/SMTP.php
CHANGED
@@ -66,6 +66,7 @@ class SMTP {
|
|
66 |
->setFrom(array(
|
67 |
$this->sender['from_email'] => $this->sender['from_name']
|
68 |
))
|
|
|
69 |
->setReplyTo(array(
|
70 |
$this->reply_to['reply_to_email'] => $this->reply_to['reply_to_name']
|
71 |
))
|
66 |
->setFrom(array(
|
67 |
$this->sender['from_email'] => $this->sender['from_name']
|
68 |
))
|
69 |
+
->setSender($this->sender['from_email'])
|
70 |
->setReplyTo(array(
|
71 |
$this->reply_to['reply_to_email'] => $this->reply_to['reply_to_name']
|
72 |
))
|
lib/Newsletter/Editor/TitleListTransformer.php
CHANGED
@@ -26,7 +26,7 @@ class TitleListTransformer {
|
|
26 |
$alignment = (in_array($alignment, array('left', 'right', 'center'))) ? $alignment : 'left';
|
27 |
|
28 |
if($this->args['titleIsLink']) {
|
29 |
-
$title = '<a href="' . get_permalink($post->ID) . '">' . $title . '</a>';
|
30 |
}
|
31 |
|
32 |
return '<li style="text-align: ' . $alignment . ';">' . $title . '</li>';
|
26 |
$alignment = (in_array($alignment, array('left', 'right', 'center'))) ? $alignment : 'left';
|
27 |
|
28 |
if($this->args['titleIsLink']) {
|
29 |
+
$title = '<a data-post-id="' . $post->ID . '" href="' . get_permalink($post->ID) . '">' . $title . '</a>';
|
30 |
}
|
31 |
|
32 |
return '<li style="text-align: ' . $alignment . ';">' . $title . '</li>';
|
lib/Newsletter/Shortcodes/Categories/Date.php
CHANGED
@@ -2,16 +2,25 @@
|
|
2 |
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
3 |
|
4 |
class Date {
|
5 |
-
static function process(
|
|
|
|
|
|
|
|
|
6 |
$date = new \DateTime('now');
|
7 |
-
$
|
8 |
'd' => $date->format('d'),
|
9 |
'dordinal' => $date->format('dS'),
|
10 |
-
'dtext' => $date->format('
|
11 |
'm' => $date->format('m'),
|
12 |
'mtext' => $date->format('F'),
|
13 |
'y' => $date->format('Y')
|
14 |
);
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
16 |
}
|
17 |
}
|
2 |
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
3 |
|
4 |
class Date {
|
5 |
+
static function process(
|
6 |
+
$action,
|
7 |
+
$action_argument = false,
|
8 |
+
$action_argument_value = false
|
9 |
+
) {
|
10 |
$date = new \DateTime('now');
|
11 |
+
$action_formats = array(
|
12 |
'd' => $date->format('d'),
|
13 |
'dordinal' => $date->format('dS'),
|
14 |
+
'dtext' => $date->format('l'),
|
15 |
'm' => $date->format('m'),
|
16 |
'mtext' => $date->format('F'),
|
17 |
'y' => $date->format('Y')
|
18 |
);
|
19 |
+
if(!empty($action_formats[$action])) {
|
20 |
+
return $action_formats[$action];
|
21 |
+
}
|
22 |
+
return ($action === 'custom' && $action_argument === 'format') ?
|
23 |
+
$date->format($action_argument_value) :
|
24 |
+
false;
|
25 |
}
|
26 |
}
|
lib/Newsletter/Shortcodes/Categories/Link.php
CHANGED
@@ -9,7 +9,8 @@ use MailPoet\Subscription\Url as SubscriptionUrl;
|
|
9 |
class Link {
|
10 |
static function process(
|
11 |
$action,
|
12 |
-
$
|
|
|
13 |
$newsletter,
|
14 |
$subscriber,
|
15 |
$queue,
|
9 |
class Link {
|
10 |
static function process(
|
11 |
$action,
|
12 |
+
$action_argument,
|
13 |
+
$action_argument_value,
|
14 |
$newsletter,
|
15 |
$subscriber,
|
16 |
$queue,
|
lib/Newsletter/Shortcodes/Categories/Newsletter.php
CHANGED
@@ -8,7 +8,8 @@ require_once(ABSPATH . "wp-includes/pluggable.php");
|
|
8 |
|
9 |
class Newsletter {
|
10 |
static function process($action,
|
11 |
-
$
|
|
|
12 |
$newsletter,
|
13 |
$subscriber,
|
14 |
$queue,
|
8 |
|
9 |
class Newsletter {
|
10 |
static function process($action,
|
11 |
+
$action_argument,
|
12 |
+
$action_argument_value,
|
13 |
$newsletter,
|
14 |
$subscriber,
|
15 |
$queue,
|
lib/Newsletter/Shortcodes/Categories/Subscriber.php
CHANGED
@@ -10,11 +10,15 @@ require_once(ABSPATH . 'wp-includes/pluggable.php');
|
|
10 |
class Subscriber {
|
11 |
static function process(
|
12 |
$action,
|
13 |
-
$
|
|
|
14 |
$newsletter,
|
15 |
$subscriber
|
16 |
) {
|
17 |
if($subscriber !== false && !is_object($subscriber)) return false;
|
|
|
|
|
|
|
18 |
switch($action) {
|
19 |
case 'firstname':
|
20 |
return ($subscriber) ? $subscriber->first_name : $default_value;
|
10 |
class Subscriber {
|
11 |
static function process(
|
12 |
$action,
|
13 |
+
$action_argument,
|
14 |
+
$action_argument_value,
|
15 |
$newsletter,
|
16 |
$subscriber
|
17 |
) {
|
18 |
if($subscriber !== false && !is_object($subscriber)) return false;
|
19 |
+
$default_value = ($action_argument === 'default') ?
|
20 |
+
$action_argument_value :
|
21 |
+
'';
|
22 |
switch($action) {
|
23 |
case 'firstname':
|
24 |
return ($subscriber) ? $subscriber->first_name : $default_value;
|
lib/Newsletter/Shortcodes/Shortcodes.php
CHANGED
@@ -37,7 +37,7 @@ class Shortcodes {
|
|
37 |
|
38 |
function match($shortcode) {
|
39 |
preg_match(
|
40 |
-
'/\[(?P<category>\w+)?:(?P<action>\w+)(?:.*?\|.*?
|
41 |
$shortcode,
|
42 |
$match
|
43 |
);
|
@@ -57,8 +57,11 @@ class Shortcodes {
|
|
57 |
false;
|
58 |
$shortcode_class =
|
59 |
Shortcodes::SHORTCODE_CATEGORY_NAMESPACE . $shortcode_category;
|
60 |
-
$
|
61 |
-
$shortcode_details['
|
|
|
|
|
|
|
62 |
false;
|
63 |
if(!class_exists($shortcode_class)) {
|
64 |
$custom_shortcode = apply_filters(
|
@@ -76,7 +79,8 @@ class Shortcodes {
|
|
76 |
}
|
77 |
return $shortcode_class::process(
|
78 |
$shortcode_action,
|
79 |
-
$
|
|
|
80 |
$_this->newsletter,
|
81 |
$_this->subscriber,
|
82 |
$_this->queue,
|
37 |
|
38 |
function match($shortcode) {
|
39 |
preg_match(
|
40 |
+
'/\[(?P<category>\w+)?:(?P<action>\w+)(?:.*?\|.*?(?P<argument>\w+):(?P<argument_value>.*?))?\]/',
|
41 |
$shortcode,
|
42 |
$match
|
43 |
);
|
57 |
false;
|
58 |
$shortcode_class =
|
59 |
Shortcodes::SHORTCODE_CATEGORY_NAMESPACE . $shortcode_category;
|
60 |
+
$shortcode_argument = !empty($shortcode_details['argument']) ?
|
61 |
+
$shortcode_details['argument'] :
|
62 |
+
false;
|
63 |
+
$shortcode_argument_value = !empty($shortcode_details['argument_value']) ?
|
64 |
+
$shortcode_details['argument_value'] :
|
65 |
false;
|
66 |
if(!class_exists($shortcode_class)) {
|
67 |
$custom_shortcode = apply_filters(
|
79 |
}
|
80 |
return $shortcode_class::process(
|
81 |
$shortcode_action,
|
82 |
+
$shortcode_argument,
|
83 |
+
$shortcode_argument_value,
|
84 |
$_this->newsletter,
|
85 |
$_this->subscriber,
|
86 |
$_this->queue,
|
lib/Router/Endpoints/CronDaemon.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace MailPoet\Router\Endpoints;
|
3 |
+
|
4 |
+
use MailPoet\Cron\CronHelper;
|
5 |
+
use MailPoet\Cron\Daemon;
|
6 |
+
|
7 |
+
if(!defined('ABSPATH')) exit;
|
8 |
+
|
9 |
+
class CronDaemon {
|
10 |
+
const ENDPOINT = 'cron_daemon';
|
11 |
+
const ACTION_RUN = 'run';
|
12 |
+
const ACTION_PING = 'ping';
|
13 |
+
const ACTION_PING_RESPONSE = 'pingResponse';
|
14 |
+
public $allowed_actions = array(
|
15 |
+
self::ACTION_RUN,
|
16 |
+
self::ACTION_PING,
|
17 |
+
self::ACTION_PING_RESPONSE
|
18 |
+
);
|
19 |
+
public $data;
|
20 |
+
|
21 |
+
function __construct($data) {
|
22 |
+
$this->data = $data;
|
23 |
+
}
|
24 |
+
|
25 |
+
function run() {
|
26 |
+
$queue = new Daemon($this->data);
|
27 |
+
$queue->run();
|
28 |
+
}
|
29 |
+
|
30 |
+
function ping() {
|
31 |
+
die(CronHelper::pingDaemon());
|
32 |
+
}
|
33 |
+
|
34 |
+
function pingResponse() {
|
35 |
+
$queue = new Daemon();
|
36 |
+
$queue->ping();
|
37 |
+
}
|
38 |
+
}
|
lib/Router/Endpoints/Queue.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace MailPoet\Router\Endpoints;
|
3 |
-
|
4 |
-
use MailPoet\Cron\Daemon;
|
5 |
-
|
6 |
-
if(!defined('ABSPATH')) exit;
|
7 |
-
|
8 |
-
class Queue {
|
9 |
-
const ENDPOINT = 'queue';
|
10 |
-
const ACTION_RUN = 'run';
|
11 |
-
public $allowed_actions = array(self::ACTION_RUN);
|
12 |
-
public $data;
|
13 |
-
|
14 |
-
function __construct($data) {
|
15 |
-
$this->data = $data;
|
16 |
-
}
|
17 |
-
|
18 |
-
function run() {
|
19 |
-
$queue = new Daemon($this->data);
|
20 |
-
$queue->run();
|
21 |
-
}
|
22 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/Router/Router.php
CHANGED
@@ -57,14 +57,15 @@ class Router {
|
|
57 |
return rtrim(base64_encode(json_encode($data)), '=');
|
58 |
}
|
59 |
|
60 |
-
static function buildRequest($endpoint, $action, $data) {
|
61 |
-
$data = self::encodeRequestData($data);
|
62 |
$params = array(
|
63 |
self::NAME => '',
|
64 |
'endpoint' => $endpoint,
|
65 |
'action' => $action,
|
66 |
-
'data' => $data
|
67 |
);
|
|
|
|
|
|
|
68 |
return add_query_arg($params, home_url());
|
69 |
}
|
70 |
|
57 |
return rtrim(base64_encode(json_encode($data)), '=');
|
58 |
}
|
59 |
|
60 |
+
static function buildRequest($endpoint, $action, $data = false) {
|
|
|
61 |
$params = array(
|
62 |
self::NAME => '',
|
63 |
'endpoint' => $endpoint,
|
64 |
'action' => $action,
|
|
|
65 |
);
|
66 |
+
if($data) {
|
67 |
+
$params['data'] = self::encodeRequestData($data);
|
68 |
+
}
|
69 |
return add_query_arg($params, home_url());
|
70 |
}
|
71 |
|
mailpoet.php
CHANGED
@@ -5,7 +5,7 @@ use MailPoet\Config\Initializer;
|
|
5 |
|
6 |
/*
|
7 |
* Plugin Name: MailPoet
|
8 |
-
* Version: 3.0.0-beta.
|
9 |
* Plugin URI: http://www.mailpoet.com
|
10 |
* Description: Create and send beautiful email newsletters, autoresponders, and post notifications without leaving WordPress. This is a beta version of our brand new plugin!
|
11 |
* Author: MailPoet
|
@@ -24,7 +24,7 @@ use MailPoet\Config\Initializer;
|
|
24 |
$mailpoet_loader = dirname(__FILE__) . '/vendor/autoload.php';
|
25 |
if(file_exists($mailpoet_loader)) {
|
26 |
require $mailpoet_loader;
|
27 |
-
define('MAILPOET_VERSION', '3.0.0-beta.
|
28 |
$initializer = new Initializer(
|
29 |
array(
|
30 |
'file' => __FILE__,
|
5 |
|
6 |
/*
|
7 |
* Plugin Name: MailPoet
|
8 |
+
* Version: 3.0.0-beta.12
|
9 |
* Plugin URI: http://www.mailpoet.com
|
10 |
* Description: Create and send beautiful email newsletters, autoresponders, and post notifications without leaving WordPress. This is a beta version of our brand new plugin!
|
11 |
* Author: MailPoet
|
24 |
$mailpoet_loader = dirname(__FILE__) . '/vendor/autoload.php';
|
25 |
if(file_exists($mailpoet_loader)) {
|
26 |
require $mailpoet_loader;
|
27 |
+
define('MAILPOET_VERSION', '3.0.0-beta.12');
|
28 |
$initializer = new Initializer(
|
29 |
array(
|
30 |
'file' => __FILE__,
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: mailpoet, wysija
|
|
3 |
Tags: newsletter, email, welcome email, post notification, autoresponder, mailchimp, signup, smtp
|
4 |
Requires at least: 4.6
|
5 |
Tested up to: 4.7
|
6 |
-
Stable tag: 3.0.0-beta.
|
7 |
Create and send beautiful emails and newsletters from WordPress.
|
8 |
|
9 |
== Description ==
|
@@ -83,6 +83,16 @@ Our [support site](https://docs.mailpoet.com/) has plenty of articles. You can w
|
|
83 |
|
84 |
== Changelog ==
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
= 3.0.0-beta.11 - 2016-12-31 =
|
87 |
* Improved: newsletters' statistics are generated in a split second;
|
88 |
* Fixed: subscribers' data is properly saved on repeat and/or multiple subscription attempts;
|
3 |
Tags: newsletter, email, welcome email, post notification, autoresponder, mailchimp, signup, smtp
|
4 |
Requires at least: 4.6
|
5 |
Tested up to: 4.7
|
6 |
+
Stable tag: 3.0.0-beta.12
|
7 |
Create and send beautiful emails and newsletters from WordPress.
|
8 |
|
9 |
== Description ==
|
83 |
|
84 |
== Changelog ==
|
85 |
|
86 |
+
= 3.0.0-beta.12 - 2017-01-10 =
|
87 |
+
* Improved: faster load times of Emails page with large database;
|
88 |
+
* Improved: sender header is now set for SMTP/PHPMail method to work with MS Exchange. Thx Karsten!;
|
89 |
+
* Improved: better asset conflict management with other plugins;
|
90 |
+
* Fixed: newly published custom post types are now sent. Thx Jim!;
|
91 |
+
* Fixed: post notifications now send when ALC block is configured to display titles only. Thx Pete;
|
92 |
+
* Fixed: shortcode "date:dtext" displays full name (e.g., Sunday) instead of abbreviated (e.g., Sun);
|
93 |
+
* Fixed: hide mailer error on send previews. Thx Karsten again!;
|
94 |
+
* Fixed: various minor issues.
|
95 |
+
|
96 |
= 3.0.0-beta.11 - 2016-12-31 =
|
97 |
* Improved: newsletters' statistics are generated in a split second;
|
98 |
* Fixed: subscribers' data is properly saved on repeat and/or multiple subscription attempts;
|
vendor/autoload.php
CHANGED
@@ -2,6 +2,6 @@
|
|
2 |
|
3 |
// autoload.php @generated by Composer
|
4 |
|
5 |
-
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
2 |
|
3 |
// autoload.php @generated by Composer
|
4 |
|
5 |
+
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit2eacd2eb1637501d63079c44ce235c23::getLoader();
|
vendor/composer/ClassLoader.php
CHANGED
@@ -53,9 +53,8 @@ class ClassLoader
|
|
53 |
|
54 |
private $useIncludePath = false;
|
55 |
private $classMap = array();
|
|
|
56 |
private $classMapAuthoritative = false;
|
57 |
-
private $missingClasses = array();
|
58 |
-
private $apcuPrefix;
|
59 |
|
60 |
public function getPrefixes()
|
61 |
{
|
@@ -272,26 +271,6 @@ class ClassLoader
|
|
272 |
return $this->classMapAuthoritative;
|
273 |
}
|
274 |
|
275 |
-
/**
|
276 |
-
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
277 |
-
*
|
278 |
-
* @param string|null $apcuPrefix
|
279 |
-
*/
|
280 |
-
public function setApcuPrefix($apcuPrefix)
|
281 |
-
{
|
282 |
-
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
283 |
-
}
|
284 |
-
|
285 |
-
/**
|
286 |
-
* The APCu prefix in use, or null if APCu caching is not enabled.
|
287 |
-
*
|
288 |
-
* @return string|null
|
289 |
-
*/
|
290 |
-
public function getApcuPrefix()
|
291 |
-
{
|
292 |
-
return $this->apcuPrefix;
|
293 |
-
}
|
294 |
-
|
295 |
/**
|
296 |
* Registers this instance as an autoloader.
|
297 |
*
|
@@ -334,34 +313,29 @@ class ClassLoader
|
|
334 |
*/
|
335 |
public function findFile($class)
|
336 |
{
|
|
|
|
|
|
|
|
|
|
|
337 |
// class map lookup
|
338 |
if (isset($this->classMap[$class])) {
|
339 |
return $this->classMap[$class];
|
340 |
}
|
341 |
-
if ($this->classMapAuthoritative
|
342 |
return false;
|
343 |
}
|
344 |
-
if (null !== $this->apcuPrefix) {
|
345 |
-
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
346 |
-
if ($hit) {
|
347 |
-
return $file;
|
348 |
-
}
|
349 |
-
}
|
350 |
|
351 |
$file = $this->findFileWithExtension($class, '.php');
|
352 |
|
353 |
// Search for Hack files if we are running on HHVM
|
354 |
-
if (
|
355 |
$file = $this->findFileWithExtension($class, '.hh');
|
356 |
}
|
357 |
|
358 |
-
if (
|
359 |
-
apcu_add($this->apcuPrefix.$class, $file);
|
360 |
-
}
|
361 |
-
|
362 |
-
if (false === $file) {
|
363 |
// Remember that this class does not exist.
|
364 |
-
$this->
|
365 |
}
|
366 |
|
367 |
return $file;
|
@@ -425,8 +399,6 @@ class ClassLoader
|
|
425 |
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
426 |
return $file;
|
427 |
}
|
428 |
-
|
429 |
-
return false;
|
430 |
}
|
431 |
}
|
432 |
|
53 |
|
54 |
private $useIncludePath = false;
|
55 |
private $classMap = array();
|
56 |
+
|
57 |
private $classMapAuthoritative = false;
|
|
|
|
|
58 |
|
59 |
public function getPrefixes()
|
60 |
{
|
271 |
return $this->classMapAuthoritative;
|
272 |
}
|
273 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
274 |
/**
|
275 |
* Registers this instance as an autoloader.
|
276 |
*
|
313 |
*/
|
314 |
public function findFile($class)
|
315 |
{
|
316 |
+
// work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
|
317 |
+
if ('\\' == $class[0]) {
|
318 |
+
$class = substr($class, 1);
|
319 |
+
}
|
320 |
+
|
321 |
// class map lookup
|
322 |
if (isset($this->classMap[$class])) {
|
323 |
return $this->classMap[$class];
|
324 |
}
|
325 |
+
if ($this->classMapAuthoritative) {
|
326 |
return false;
|
327 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
328 |
|
329 |
$file = $this->findFileWithExtension($class, '.php');
|
330 |
|
331 |
// Search for Hack files if we are running on HHVM
|
332 |
+
if ($file === null && defined('HHVM_VERSION')) {
|
333 |
$file = $this->findFileWithExtension($class, '.hh');
|
334 |
}
|
335 |
|
336 |
+
if ($file === null) {
|
|
|
|
|
|
|
|
|
337 |
// Remember that this class does not exist.
|
338 |
+
return $this->classMap[$class] = false;
|
339 |
}
|
340 |
|
341 |
return $file;
|
399 |
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
400 |
return $file;
|
401 |
}
|
|
|
|
|
402 |
}
|
403 |
}
|
404 |
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -163,7 +163,7 @@ return array(
|
|
163 |
'MailPoet\\Newsletter\\Shortcodes\\ShortcodesHelper' => $baseDir . '/lib/Newsletter/Shortcodes/ShortcodesHelper.php',
|
164 |
'MailPoet\\Newsletter\\Url' => $baseDir . '/lib/Newsletter/Url.php',
|
165 |
'MailPoet\\Newsletter\\ViewInBrowser' => $baseDir . '/lib/Newsletter/ViewInBrowser.php',
|
166 |
-
'MailPoet\\Router\\Endpoints\\
|
167 |
'MailPoet\\Router\\Endpoints\\Subscription' => $baseDir . '/lib/Router/Endpoints/Subscription.php',
|
168 |
'MailPoet\\Router\\Endpoints\\Track' => $baseDir . '/lib/Router/Endpoints/Track.php',
|
169 |
'MailPoet\\Router\\Endpoints\\ViewInBrowser' => $baseDir . '/lib/Router/Endpoints/ViewInBrowser.php',
|
163 |
'MailPoet\\Newsletter\\Shortcodes\\ShortcodesHelper' => $baseDir . '/lib/Newsletter/Shortcodes/ShortcodesHelper.php',
|
164 |
'MailPoet\\Newsletter\\Url' => $baseDir . '/lib/Newsletter/Url.php',
|
165 |
'MailPoet\\Newsletter\\ViewInBrowser' => $baseDir . '/lib/Newsletter/ViewInBrowser.php',
|
166 |
+
'MailPoet\\Router\\Endpoints\\CronDaemon' => $baseDir . '/lib/Router/Endpoints/CronDaemon.php',
|
167 |
'MailPoet\\Router\\Endpoints\\Subscription' => $baseDir . '/lib/Router/Endpoints/Subscription.php',
|
168 |
'MailPoet\\Router\\Endpoints\\Track' => $baseDir . '/lib/Router/Endpoints/Track.php',
|
169 |
'MailPoet\\Router\\Endpoints\\ViewInBrowser' => $baseDir . '/lib/Router/Endpoints/ViewInBrowser.php',
|
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 ComposerAutoloaderInit42e5829133c754f10db8482d3d3bddd5
|
|
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')
|
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 ComposerAutoloaderInit42e5829133c754f10db8482d3d3bddd5
|
|
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 ComposerAutoloaderInit2eacd2eb1637501d63079c44ce235c23
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit2eacd2eb1637501d63079c44ce235c23', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit2eacd2eb1637501d63079c44ce235c23', 'loadClassLoader'));
|
25 |
|
26 |
+
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit2eacd2eb1637501d63079c44ce235c23::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\ComposerStaticInit2eacd2eb1637501d63079c44ce235c23::$files;
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequire2eacd2eb1637501d63079c44ce235c23($fileIdentifier, $file);
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
+
function composerRequire2eacd2eb1637501d63079c44ce235c23($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',
|
@@ -234,7 +234,7 @@ class ComposerStaticInit42e5829133c754f10db8482d3d3bddd5
|
|
234 |
'MailPoet\\Newsletter\\Shortcodes\\ShortcodesHelper' => __DIR__ . '/../..' . '/lib/Newsletter/Shortcodes/ShortcodesHelper.php',
|
235 |
'MailPoet\\Newsletter\\Url' => __DIR__ . '/../..' . '/lib/Newsletter/Url.php',
|
236 |
'MailPoet\\Newsletter\\ViewInBrowser' => __DIR__ . '/../..' . '/lib/Newsletter/ViewInBrowser.php',
|
237 |
-
'MailPoet\\Router\\Endpoints\\
|
238 |
'MailPoet\\Router\\Endpoints\\Subscription' => __DIR__ . '/../..' . '/lib/Router/Endpoints/Subscription.php',
|
239 |
'MailPoet\\Router\\Endpoints\\Track' => __DIR__ . '/../..' . '/lib/Router/Endpoints/Track.php',
|
240 |
'MailPoet\\Router\\Endpoints\\ViewInBrowser' => __DIR__ . '/../..' . '/lib/Router/Endpoints/ViewInBrowser.php',
|
@@ -555,10 +555,10 @@ class ComposerStaticInit42e5829133c754f10db8482d3d3bddd5
|
|
555 |
public static function getInitializer(ClassLoader $loader)
|
556 |
{
|
557 |
return \Closure::bind(function () use ($loader) {
|
558 |
-
$loader->prefixLengthsPsr4 =
|
559 |
-
$loader->prefixDirsPsr4 =
|
560 |
-
$loader->prefixesPsr0 =
|
561 |
-
$loader->classMap =
|
562 |
|
563 |
}, null, ClassLoader::class);
|
564 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit2eacd2eb1637501d63079c44ce235c23
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
234 |
'MailPoet\\Newsletter\\Shortcodes\\ShortcodesHelper' => __DIR__ . '/../..' . '/lib/Newsletter/Shortcodes/ShortcodesHelper.php',
|
235 |
'MailPoet\\Newsletter\\Url' => __DIR__ . '/../..' . '/lib/Newsletter/Url.php',
|
236 |
'MailPoet\\Newsletter\\ViewInBrowser' => __DIR__ . '/../..' . '/lib/Newsletter/ViewInBrowser.php',
|
237 |
+
'MailPoet\\Router\\Endpoints\\CronDaemon' => __DIR__ . '/../..' . '/lib/Router/Endpoints/CronDaemon.php',
|
238 |
'MailPoet\\Router\\Endpoints\\Subscription' => __DIR__ . '/../..' . '/lib/Router/Endpoints/Subscription.php',
|
239 |
'MailPoet\\Router\\Endpoints\\Track' => __DIR__ . '/../..' . '/lib/Router/Endpoints/Track.php',
|
240 |
'MailPoet\\Router\\Endpoints\\ViewInBrowser' => __DIR__ . '/../..' . '/lib/Router/Endpoints/ViewInBrowser.php',
|
555 |
public static function getInitializer(ClassLoader $loader)
|
556 |
{
|
557 |
return \Closure::bind(function () use ($loader) {
|
558 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit2eacd2eb1637501d63079c44ce235c23::$prefixLengthsPsr4;
|
559 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit2eacd2eb1637501d63079c44ce235c23::$prefixDirsPsr4;
|
560 |
+
$loader->prefixesPsr0 = ComposerStaticInit2eacd2eb1637501d63079c44ce235c23::$prefixesPsr0;
|
561 |
+
$loader->classMap = ComposerStaticInit2eacd2eb1637501d63079c44ce235c23::$classMap;
|
562 |
|
563 |
}, null, ClassLoader::class);
|
564 |
}
|
vendor/composer/installed.json
CHANGED
@@ -14,7 +14,7 @@
|
|
14 |
"reference": "b0c1bda3be5a35da44ba1ac28cc61c67d2ada465",
|
15 |
"shasum": ""
|
16 |
},
|
17 |
-
"time": "2015-11-
|
18 |
"type": "library",
|
19 |
"installation-source": "dist",
|
20 |
"autoload": {
|
@@ -52,7 +52,7 @@
|
|
52 |
"require": {
|
53 |
"php": ">=5.2.0"
|
54 |
},
|
55 |
-
"time": "2014-06-
|
56 |
"type": "library",
|
57 |
"installation-source": "dist",
|
58 |
"autoload": {
|
@@ -113,7 +113,7 @@
|
|
113 |
"j4mie/idiorm": "1.5.*",
|
114 |
"php": ">=5.2.0"
|
115 |
},
|
116 |
-
"time": "2014-09-
|
117 |
"type": "library",
|
118 |
"installation-source": "dist",
|
119 |
"autoload": {
|
@@ -177,7 +177,7 @@
|
|
177 |
"require-dev": {
|
178 |
"phpunit/phpunit": "~4.0|~5.0"
|
179 |
},
|
180 |
-
"time": "2016-01-
|
181 |
"type": "library",
|
182 |
"installation-source": "dist",
|
183 |
"autoload": {
|
@@ -223,7 +223,7 @@
|
|
223 |
"suggest": {
|
224 |
"ext-mbstring": "For best performance"
|
225 |
},
|
226 |
-
"time": "2016-05-
|
227 |
"type": "library",
|
228 |
"extra": {
|
229 |
"branch-alias": {
|
@@ -296,7 +296,7 @@
|
|
296 |
"symfony/config": "",
|
297 |
"symfony/yaml": ""
|
298 |
},
|
299 |
-
"time": "2016-10-
|
300 |
"type": "library",
|
301 |
"extra": {
|
302 |
"branch-alias": {
|
@@ -351,7 +351,7 @@
|
|
351 |
"require-dev": {
|
352 |
"phpunit/phpunit": "~4.0|~5.0"
|
353 |
},
|
354 |
-
"time": "2015-11-
|
355 |
"type": "library",
|
356 |
"installation-source": "dist",
|
357 |
"autoload": {
|
@@ -402,7 +402,7 @@
|
|
402 |
"phpunit/phpunit": ">=4.0",
|
403 |
"soundasleep/component-tests": "dev-master"
|
404 |
},
|
405 |
-
"time": "2016-07-
|
406 |
"type": "library",
|
407 |
"installation-source": "dist",
|
408 |
"autoload": {
|
@@ -454,7 +454,7 @@
|
|
454 |
"require-dev": {
|
455 |
"mockery/mockery": "~0.9.1"
|
456 |
},
|
457 |
-
"time": "2016-07-
|
458 |
"type": "library",
|
459 |
"extra": {
|
460 |
"branch-alias": {
|
@@ -509,7 +509,7 @@
|
|
509 |
"require-dev": {
|
510 |
"htmlawed/htmlawed": "dev-master"
|
511 |
},
|
512 |
-
"time": "2016-01-
|
513 |
"type": "library",
|
514 |
"installation-source": "dist",
|
515 |
"autoload": {
|
@@ -564,7 +564,7 @@
|
|
564 |
"symfony/debug": "~2.7",
|
565 |
"symfony/phpunit-bridge": "~2.7"
|
566 |
},
|
567 |
-
"time": "2016-10-
|
568 |
"type": "library",
|
569 |
"extra": {
|
570 |
"branch-alias": {
|
14 |
"reference": "b0c1bda3be5a35da44ba1ac28cc61c67d2ada465",
|
15 |
"shasum": ""
|
16 |
},
|
17 |
+
"time": "2015-11-28 21:47:43",
|
18 |
"type": "library",
|
19 |
"installation-source": "dist",
|
20 |
"autoload": {
|
52 |
"require": {
|
53 |
"php": ">=5.2.0"
|
54 |
},
|
55 |
+
"time": "2014-06-23 13:08:57",
|
56 |
"type": "library",
|
57 |
"installation-source": "dist",
|
58 |
"autoload": {
|
113 |
"j4mie/idiorm": "1.5.*",
|
114 |
"php": ">=5.2.0"
|
115 |
},
|
116 |
+
"time": "2014-09-23 10:49:36",
|
117 |
"type": "library",
|
118 |
"installation-source": "dist",
|
119 |
"autoload": {
|
177 |
"require-dev": {
|
178 |
"phpunit/phpunit": "~4.0|~5.0"
|
179 |
},
|
180 |
+
"time": "2016-01-26 21:23:30",
|
181 |
"type": "library",
|
182 |
"installation-source": "dist",
|
183 |
"autoload": {
|
223 |
"suggest": {
|
224 |
"ext-mbstring": "For best performance"
|
225 |
},
|
226 |
+
"time": "2016-05-18 14:26:46",
|
227 |
"type": "library",
|
228 |
"extra": {
|
229 |
"branch-alias": {
|
296 |
"symfony/config": "",
|
297 |
"symfony/yaml": ""
|
298 |
},
|
299 |
+
"time": "2016-10-18 04:28:30",
|
300 |
"type": "library",
|
301 |
"extra": {
|
302 |
"branch-alias": {
|
351 |
"require-dev": {
|
352 |
"phpunit/phpunit": "~4.0|~5.0"
|
353 |
},
|
354 |
+
"time": "2015-11-04 20:07:17",
|
355 |
"type": "library",
|
356 |
"installation-source": "dist",
|
357 |
"autoload": {
|
402 |
"phpunit/phpunit": ">=4.0",
|
403 |
"soundasleep/component-tests": "dev-master"
|
404 |
},
|
405 |
+
"time": "2016-07-28 01:09:53",
|
406 |
"type": "library",
|
407 |
"installation-source": "dist",
|
408 |
"autoload": {
|
454 |
"require-dev": {
|
455 |
"mockery/mockery": "~0.9.1"
|
456 |
},
|
457 |
+
"time": "2016-07-08 11:51:25",
|
458 |
"type": "library",
|
459 |
"extra": {
|
460 |
"branch-alias": {
|
509 |
"require-dev": {
|
510 |
"htmlawed/htmlawed": "dev-master"
|
511 |
},
|
512 |
+
"time": "2016-01-14 20:55:00",
|
513 |
"type": "library",
|
514 |
"installation-source": "dist",
|
515 |
"autoload": {
|
564 |
"symfony/debug": "~2.7",
|
565 |
"symfony/phpunit-bridge": "~2.7"
|
566 |
},
|
567 |
+
"time": "2016-10-25 19:17:17",
|
568 |
"type": "library",
|
569 |
"extra": {
|
570 |
"branch-alias": {
|