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 | |
| 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": {
|
