MailPoet Newsletters (New) - Version 3.0.0-beta.12

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 Icon 128x128 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 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
- process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;
 
 
 
 
 
 
 
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.1';
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 (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {
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
- // TODO: Validate that text is allowed as a child of this node
11541
- if (process.env.NODE_ENV !== 'production') {
11542
- setAndValidateContentChildDev.call(this, contentToUse);
 
 
 
 
 
 
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
- node.defaultValue = '' + props.defaultValue;
 
 
 
 
 
 
 
 
 
 
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
- // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.
14213
- node.value = node.textContent; // Detach value from defaultValue
 
 
 
 
 
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
- !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? 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', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;
 
 
 
 
 
 
 
 
 
 
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.1';
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
- "/mnt/d/storage/coding/WWW/current/mp/phoenix"
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": "/mnt/d/storage/coding/WWW/current/mp/phoenix",
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.0 - built Wed, Nov 2nd 2016, 10:27 am
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.0';
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.0'
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, SuperModel, jQuery, _, Handlebars) {
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.0 - built Wed, Nov 2nd 2016, 10:27 am
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.0';
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.0'
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) 2016
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: 2016-12-31 19:55:48+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: 2016-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,19 +967,19 @@ msgstr ""
967
  msgid "Preview in a new tab"
968
  msgstr ""
969
 
970
- #: lib/Cron/CronHelper.php:83
971
  msgid "Site URL is unreachable."
972
  msgstr ""
973
 
974
- #: lib/Cron/CronHelper.php:89
975
  msgid "Maximum execution time has been reached."
976
  msgstr ""
977
 
978
- #: lib/Cron/Daemon.php:26
979
  msgid "Invalid or missing request data."
980
  msgstr ""
981
 
982
- #: lib/Cron/Daemon.php:29
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:31
1313
  #: views/newsletter/editor.html:1037
1314
  msgid "Unsubscribe"
1315
  msgstr ""
1316
 
1317
- #: lib/Newsletter/Shortcodes/Categories/Link.php:52
1318
  #: views/newsletter/editor.html:1037
1319
  msgid "Manage subscription"
1320
  msgstr ""
1321
 
1322
- #: lib/Newsletter/Shortcodes/Categories/Link.php:76
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['error']
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
- add_filter(
173
- 'publish_post',
174
- '\MailPoet\Newsletter\Scheduler\Scheduler::schedulePostNotification',
175
- 10, 1
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 (queue_id)',
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 (queue_id)',
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 (queue_id)',
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->setupAdminDependencies();
25
  }
26
  }
27
 
@@ -110,26 +110,20 @@ class Widget {
110
  ));
111
  }
112
 
113
- function setupAdminDependencies() {
114
- if(
115
- empty($_GET['page'])
116
- or
117
- isset($_GET['page']) && strpos($_GET['page'], 'mailpoet') === false
118
- ) {
119
- wp_enqueue_script('mailpoet_vendor',
120
- Env::$assets_url.'/js/vendor.js',
121
- array(),
122
- Env::$version,
123
- true
124
- );
125
-
126
- wp_enqueue_script('mailpoet_admin',
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\Queue as QueueEndpoint;
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
- QueueEndpoint::ENDPOINT,
53
- QueueEndpoint::ACTION_RUN,
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
- exit;
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($action) {
 
 
 
 
6
  $date = new \DateTime('now');
7
- $actions = array(
8
  'd' => $date->format('d'),
9
  'dordinal' => $date->format('dS'),
10
- 'dtext' => $date->format('D'),
11
  'm' => $date->format('m'),
12
  'mtext' => $date->format('F'),
13
  'y' => $date->format('Y')
14
  );
15
- return (isset($actions[$action])) ? $actions[$action] : false;
 
 
 
 
 
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
- $default_value,
 
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
- $default_value,
 
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
- $default_value,
 
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+)(?:.*?\|.*?default:(?P<default>.*?))?\]/',
41
  $shortcode,
42
  $match
43
  );
@@ -57,8 +57,11 @@ class Shortcodes {
57
  false;
58
  $shortcode_class =
59
  Shortcodes::SHORTCODE_CATEGORY_NAMESPACE . $shortcode_category;
60
- $shortcode_default_value = !empty($shortcode_details['default']) ?
61
- $shortcode_details['default'] :
 
 
 
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
- $shortcode_default_value,
 
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.11
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.11');
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.11
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 ComposerAutoloaderInit42e5829133c754f10db8482d3d3bddd5::getLoader();
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 || isset($this->missingClasses[$class])) {
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 (false === $file && defined('HHVM_VERSION')) {
355
  $file = $this->findFileWithExtension($class, '.hh');
356
  }
357
 
358
- if (null !== $this->apcuPrefix) {
359
- apcu_add($this->apcuPrefix.$class, $file);
360
- }
361
-
362
- if (false === $file) {
363
  // Remember that this class does not exist.
364
- $this->missingClasses[$class] = true;
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\\Queue' => $baseDir . '/lib/Router/Endpoints/Queue.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',
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 ComposerAutoloaderInit42e5829133c754f10db8482d3d3bddd5
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit42e5829133c754f10db8482d3d3bddd5
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit42e5829133c754f10db8482d3d3bddd5', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit42e5829133c754f10db8482d3d3bddd5', 'loadClassLoader'));
25
 
26
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit42e5829133c754f10db8482d3d3bddd5::getInitializer($loader));
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\ComposerStaticInit42e5829133c754f10db8482d3d3bddd5::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
- composerRequire42e5829133c754f10db8482d3d3bddd5($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
- function composerRequire42e5829133c754f10db8482d3d3bddd5($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class 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 ComposerStaticInit42e5829133c754f10db8482d3d3bddd5
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\\Queue' => __DIR__ . '/../..' . '/lib/Router/Endpoints/Queue.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,10 +555,10 @@ class ComposerStaticInit42e5829133c754f10db8482d3d3bddd5
555
  public static function getInitializer(ClassLoader $loader)
556
  {
557
  return \Closure::bind(function () use ($loader) {
558
- $loader->prefixLengthsPsr4 = ComposerStaticInit42e5829133c754f10db8482d3d3bddd5::$prefixLengthsPsr4;
559
- $loader->prefixDirsPsr4 = ComposerStaticInit42e5829133c754f10db8482d3d3bddd5::$prefixDirsPsr4;
560
- $loader->prefixesPsr0 = ComposerStaticInit42e5829133c754f10db8482d3d3bddd5::$prefixesPsr0;
561
- $loader->classMap = ComposerStaticInit42e5829133c754f10db8482d3d3bddd5::$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-28T21:47:43+00:00",
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-23T13:08:57+00:00",
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-23T10:49:36+00:00",
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-26T21:23:30+00:00",
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-18T14:26:46+00:00",
227
  "type": "library",
228
  "extra": {
229
  "branch-alias": {
@@ -296,7 +296,7 @@
296
  "symfony/config": "",
297
  "symfony/yaml": ""
298
  },
299
- "time": "2016-10-18T04:28:30+00:00",
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-04T20:07:17+00:00",
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-28T01:09:53+00:00",
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-08T11:51:25+00:00",
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-14T20:55:00+00:00",
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-25T19:17:17+00:00",
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": {